Hibernate(Stored Procedure) vs Firebird

4 respostas
J

Bom Dia, a todos estou com o seguinte problema quero executar uma procedure de meu DBA mapeando da seguinte forma.

@Entity

@NamedNativeQuery(callable=true, name=SPC_Teste, query=select * from SPC_Teste)

public class SPCTeste {

private Integer resultado;
public Integer getResultado() {

return resultado;

}

}

mas esta dando a seguinte exception:

Exception in thread “main” java.lang.ExceptionInInitializerError

at br.inf.atena.hibernate.DAOHibernate.abrirSessao(DAOHibernate.java:529)

at br.inf.atena.hibernate.manutencao.Manutencao.main(Manutencao.java:151)

Caused by: org.hibernate.cfg.NotYetImplementedException: Pure native scalar queries are not yet supported

at org.hibernate.cfg.annotations.QueryBinder.bindNativeQuery(QueryBinder.java:179)

at org.hibernate.cfg.AnnotationBinder.bindQueries(AnnotationBinder.java:283)

at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:417)

at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:498)

at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:277)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)

at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)

at br.inf.atena.hibernate.HibernateFactory.(HibernateFactory.java:76)

… 2 more

Obrigado !!!
Joao Vitor

4 Respostas

J

Precisa colar um @Id no resultado vai ficar assim:
@Id
private Integer resultado;

[email removido:
]Bom Dia, a todos estou com o seguinte problema quero executar uma procedure de meu DBA mapeando da seguinte forma.

@Entity

@NamedNativeQuery(callable=true, name=SPC_Teste, query=select * from SPC_Teste)

public class SPCTeste {

private Integer resultado;
public Integer getResultado() {

return resultado;

}

}

mas esta dando a seguinte exception:

Exception in thread “main” java.lang.ExceptionInInitializerError

at br.inf.atena.hibernate.DAOHibernate.abrirSessao(DAOHibernate.java:529)

at br.inf.atena.hibernate.manutencao.Manutencao.main(Manutencao.java:151)

Caused by: org.hibernate.cfg.NotYetImplementedException: Pure native scalar queries are not yet supported

at org.hibernate.cfg.annotations.QueryBinder.bindNativeQuery(QueryBinder.java:179)

at org.hibernate.cfg.AnnotationBinder.bindQueries(AnnotationBinder.java:283)

at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:417)

at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:498)

at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:277)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)

at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)

at br.inf.atena.hibernate.HibernateFactory.(HibernateFactory.java:76)

… 2 more

Obrigado !!!
Joao Vitor

H

pessoal tambem estou com o mesmo erro será que alguem poderia me ajudar?

package br.com.cas.orion.persistence.contrato.cambio;

import java.util.Calendar;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.NamedNativeQueries;
import org.hibernate.annotations.NamedNativeQuery;

import br.com.cas.orion.persistence.docs.Documento;
import br.com.cas.persistence.bean.Bean;


/**
 * The persistent class for the tb_contrato_de_cambio database table.
 * 
 */
@Entity
@Table(name="tb_contrato_de_cambio")
@NamedNativeQueries(value = { 
		@NamedNativeQuery(name = "selectCon", 
				query = " select contrato1" +
						" 	   , contrato2" +
						" from ContratoDeCambio as contrato1 , ContratoDeCambio as contrato2" +
						" where contrato1.idPraca = contrato2.idPraca" +
						" and   contrato1.cnpjComprador = contrato2.cnpjComprador" +
						" and   contrato1.cnpjVendedor = contrato2.cnpjVendedor" +
						" and   contrato1.idMoeda = contrato2.idMoeda" +
						" and   contrato1.taxaCambial = contrato2.taxaCambial" +
						" and   contrato1.valorMoedaEstrangeira = contrato2.valorMoedaEstrangeira" +
						" and   contrato1.valorMoedaNacional = contrato2.valorMoedaNacional" +
						" and   contrato1.dataLiquidacao = contrato1.dataLiquidacao" +
						" and   contrato1.documento <> contrato2.documento" +
						" and   contrato1.tipoContratoCambio in (select tipo from TipoContratoCambio tipo where (tipo.id % 2 = 0))" +
						" and   contrato2.tipoContratoCambio in (select tipo2 from TipoContratoCambio tipo2 where (tipo2.id % 2 > 0))" +
						" and  contrato2.documento.pasta.comunidade.id = :idComunidade"
				) 
})
public class ContratoDeCambio implements Bean {
	
	@Id
	@GeneratedValue
	private Long id;

	@Column(name="cnpj_comprador")
	private String cnpjComprador;

	@Column(name="cnpj_vendedor")
	private String cnpjVendedor;

    @Temporal( TemporalType.DATE)
	@Column(name="data_liquidacao")
	private Calendar dataLiquidacao;

	@Column(name="id_moeda")
	private Long idMoeda;

	@Column(name="id_praca")
	private Long idPraca;

	@Column(name="numero_contrato")
	private String numeroContrato;

	@Column(name="taxa_cambial")
	private Double taxaCambial;

	@Column(name="valor_moeda_estrangeira")
	private Double valorMoedaEstrangeira;

	@Column(name="valor_moeda_nacional")
	private Double valorMoedaNacional;

    @ManyToOne
	@JoinColumn(name="id_documento")
	private Documento documento;

    @ManyToOne
	@JoinColumn(name="id_tipo")
	private TipoContratoCambio tipoContratoCambio;
    
    public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}
    
    public ContratoDeCambio() {
    }

	public String getCnpjComprador() {
		return this.cnpjComprador;
	}

	public void setCnpjComprador(String cnpjComprador) {
		this.cnpjComprador = cnpjComprador;
	}

	public String getCnpjVendedor() {
		return this.cnpjVendedor;
	}

	public void setCnpjVendedor(String cnpjVendedor) {
		this.cnpjVendedor = cnpjVendedor;
	}

	public Calendar getDataLiquidacao() {
		return this.dataLiquidacao;
	}

	public void setDataLiquidacao(Calendar dataLiquidacao) {
		this.dataLiquidacao = dataLiquidacao;
	}

	public Long getIdMoeda() {
		return this.idMoeda;
	}

	public void setIdMoeda(Long idMoeda) {
		this.idMoeda = idMoeda;
	}

	public Long getIdPraca() {
		return this.idPraca;
	}

	public void setIdPraca(Long idPraca) {
		this.idPraca = idPraca;
	}

	public String getNumeroContrato() {
		return this.numeroContrato;
	}

	public void setNumeroContrato(String numeroContrato) {
		this.numeroContrato = numeroContrato;
	}

	public Double getTaxaCambial() {
		return this.taxaCambial;
	}

	public void setTaxaCambial(Double taxaCambial) {
		this.taxaCambial = taxaCambial;
	}

	public Double getValorMoedaEstrangeira() {
		return this.valorMoedaEstrangeira;
	}

	public void setValorMoedaEstrangeira(Double valorMoedaEstrangeira) {
		this.valorMoedaEstrangeira = valorMoedaEstrangeira;
	}

	public Double getValorMoedaNacional() {
		return this.valorMoedaNacional;
	}

	public void setValorMoedaNacional(Double valorMoedaNacional) {
		this.valorMoedaNacional = valorMoedaNacional;
	}

	public Documento getDocumento() {
		return documento;
	}

	public void setDocumento(Documento documento) {
		this.documento = documento;
	}

	public TipoContratoCambio getTipoContratoCambio() {
		return tipoContratoCambio;
	}

	public void setTipoContratoCambio(TipoContratoCambio tipoContratoCambio) {
		this.tipoContratoCambio = tipoContratoCambio;
	}
	
}

Obrigado desde já

adriano_si

Cara, tem um tópico explicando esse mapeamento de Procedure já aqui no GUJ:

Porém acho que seu caso é outro, afinal você não está mapeando nenhuma Procedure e ainda por cima não explicou que erro que deu na sua consulta. Explique melhor seu problema, de preferência em um outro tópico, depois de esgotar todas as possibilidades de consulta;

Abs [] e sucesso na solução.

doravan

Pure native scalar queries are not yet supported
ou seja,
o Hibernate ainda não suporta funções escalares nativas.
Sei que é tosco, mas resolvi a situação criando uma view pra uma procedure, e mapeando a view no java.

Criado 4 de setembro de 2008
Ultima resposta 27 de out. de 2011
Respostas 4
Participantes 4