Java Hibernate本机查询创建返回空结果
我的DAO类中有这样的方法:Java Hibernate本机查询创建返回空结果,java,hibernate,Java,Hibernate,我的DAO类中有这样的方法: public List<Protocolo> buscarProtocolos(int situacao){ List<Protocolo> protocolos = null; protocolosPorSitucao = null; String sql = "select * from hibernatedb.protocolo where situacao_id = ?"; em = Hiberna
public List<Protocolo> buscarProtocolos(int situacao){
List<Protocolo> protocolos = null;
protocolosPorSitucao = null;
String sql = "select * from hibernatedb.protocolo where situacao_id = ?";
em = HibernateManager.getEntityManager();
protocolosPorSitucao = em.createNativeQuery(sql, Protocolo.class);
protocolosPorSitucao.setParameter(1, situacao);
em.getTransaction().begin();
logger.info("Buscando protocolos por situacao : "+ situacao);
protocolos = (List<Protocolo>) protocolosPorSitucao.getResultList();
logger.info("Protocolos encontrados: "+protocolos.size());
em.getTransaction().commit();
em.close();
return protocolos;
}
这意味着hibernate返回了0个结果,因为我的列表为空
代码中的错误在哪里
注意:创建NativeQuery时,我也需要设置数据库。这是因为NativeQuery会忽略在
persistence.xml
?上建立的配置。您是否尝试过使用:situacaoId
而不是?
(然后调用setParameter(situacaoId,1)
。此外,我认为您应该使用1L,但我不确定如何在db中声明您的id。如果我将?更改为:stiaucaoId,它将返回一个错误:具有该位置的参数[1]不存在
是否使用该protocolositocao.setParameter(“situacaoId”,1)
(或1L)。还将protocolositocao声明为Query protocolositocao
。现在我这样做了:String sql=“select*from hibernatedb.protocolo,其中situacao\u id=:situacao\u id”;
和protocolositocao.setParameter(“situacao\u id”,1L);
它没有给我任何错误,但仍然没有结果。解决了我的问题。我以前更改了persistence.xml以测试与Oracle数据库的兼容性,但忘记将其更改回我的postgresql数据库,因为它拥有所有数据。
Hibernate: select * from hibernatedb.protocolo where situacao_id = ?
0