Problemas ao utilizar o @SqlResultSetMapping

1 resposta
EuclidesFilizola

Boa tarde pessoal,

estou tentando executar o seguinte select:

SELECT * FROM FINANCEIRO.TBSIFN_NOTAFISCALBENS NFB INNER JOIN FINANCEIRO.TBSIFN_NOTAFISCAL NF ON (NFB.cd_NotaFiscal = NF.cd_NotaFiscal)"
			+"INNER JOIN FINANCEIRO.TBSIFN_FORNECEDOR Fo ON (NF.cd_Fornecedor = Fo.cd_Fornecedor)"+
			"INNER JOIN FINANCEIRO.TBSIFN_DEPRECIACAO D ON (NFB.cd_Deprec = D.cd_Deprec)"+
			"WHERE cd_NotaFiscalBens NOT IN (SELECT cd_NotaFiscalBens FROM PATRIMONIO.TBSICP_PATRIMONIO)"+
			"ORDER BY NF.dt_NotalFiscal , Fo.ds_NomeRazaoSocial

e fazendo o seguinte:

@Entity
@Table(name="tbsicp_patrimonio")
@SqlResultSetMapping(name="listaPatrimonioNtombado",
	entities={
	@EntityResult(entityClass=NotaFiscalBens.class
			
	),
	@EntityResult(entityClass=NotaFiscal.class
	
	),
	@EntityResult(entityClass=Fornecedor.class
	
	
	),
	@EntityResult(entityClass=Depreciacao.class
	
	)
	
}

e me aparece o seguinte erro:

Caused by: org.postgresql.util.PSQLException: ERROR: relation "patrimonio.tbsifn_convenio" does not exist
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:271)
	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
	at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
	at org.hibernate.loader.Loader.doQuery(Loader.java:674)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
	... 69 more

Agora vou explicar um pouco melhor.

Se eu executar aquele select dentro do meu banco, funciona normalmente. Mas quando eu tentei utilizar com @SqlResultSetMapping, deu esse erro de relacionamento entre tabelas.

Alguém saberia me explicar o porquê ? Algueria teria uma solução para mim ?

Agradeço desde já.

1 Resposta

EuclidesFilizola

Bem pessoal,

esse primeiro problema eu já resolvi, pois tive que colocar o schema em todas as minhas entidades, conforme código abaixo:

@Entity
@Table([b]schema="financeiro"[/b],name="tbsifn_convenio")

Agora ocorre uma simples dúvida:

quando eu vou executar o meu select, de qual tipo ele deve ser ?

eu to colocando como Object, conforme código abaixo:

public List<Object> listarPatrimonioNTombados(){
		List<Object> lista = new ArrayList<Object>();
		
		EntityManager manager = factory.createEntityManager();
		
		try{
		manager.getTransaction().begin();
		
		String sql = "SELECT * FROM FINANCEIRO.TBSIFN_NOTAFISCALBENS NFB INNER JOIN FINANCEIRO.TBSIFN_NOTAFISCAL NF ON (NFB.cd_NotaFiscal = NF.cd_NotaFiscal)"
			+"INNER JOIN FINANCEIRO.TBSIFN_FORNECEDOR Fo ON (NF.cd_Fornecedor = Fo.cd_Fornecedor)"+
			"INNER JOIN FINANCEIRO.TBSIFN_DEPRECIACAO D ON (NFB.cd_Deprec = D.cd_Deprec)"+
			"WHERE cd_NotaFiscalBens NOT IN (SELECT cd_NotaFiscalBens FROM PATRIMONIO.TBSICP_PATRIMONIO)"+
			"ORDER BY NF.dt_NotalFiscal , Fo.ds_NomeRazaoSocial ;";
		
		final Query query = manager
		.createNativeQuery(sql, "listaPatrimonioNtombado");
		
		lista =  query.getResultList();
		

.......................
Criado 5 de julho de 2010
Ultima resposta 5 de jul. de 2010
Respostas 1
Participantes 1