Java Hibernate简单选择查询不返回任何内容

Java Hibernate简单选择查询不返回任何内容,java,hibernate,postgresql,Java,Hibernate,Postgresql,我设置了这个简单的Hibernate查询,但它什么也不返回,下面是我的代码: EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("timereg"); EntityManager em = emf.createEntityManager(); int id = em.createQuery("SELECT emp.id FROM Employe

我设置了这个简单的Hibernate查询,但它什么也不返回,下面是我的代码:

      EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("timereg");
      EntityManager em = emf.createEntityManager();

     int id = em.createQuery("SELECT emp.id FROM Employee as emp WHERE emp.bsn = '398723916'").getFirstResult();
     object.getEmployee().setId(id);
     System.out.println("query returns employee id: " + id);
愚蠢的是id保持为零,但当我在PostgreSQL中执行此查询时,它返回37

我认为hibernate不喜欢我实现select查询的方式,有人知道我的select查询有什么问题吗

答案是: select查询没有什么问题,我只需要使用GetSingleResult而不是getFirstResult; 将代码更改为:

EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("timereg");
      EntityManager em = emf.createEntityManager();

     Object ob = em.createQuery("select id from Employee where bsn = '398723917'").getSingleResult();

        object.getEmployee().setId(Integer.parseInt(ob.toString()));
        System.out.println(ob);
这是我问题的总体解决方案,但我受到了Yanf蚤的启发,所以他应该得到所有的积分。

您使用的方法是getFirstResult,它会给出记录在表中的位置。您应该改用getSingleResult。看

编辑

这是:

Object ob = em.createQuery("select id from Employee where bsn = '398723917'").getSingleResult();

也许我能帮上忙。i、 e.尝试使用BigDecimal而不是LongTanks,但我已经删除了该表,让它使用普通整数而不是longJava/bigintSQL语言再次生成。因此,表中的bigint变为int,employee类中的id也变为int.ps。我更新了我的codecan,你可以打开log4j中的Hibernate.SQL来查看执行哪个SQL吗?Hi@Firo,我该怎么做?我不熟悉Hibernate,当我在本地机器上搜索术语log4j时,我会得到大量的结果。。。我应该选择哪个日志文件/设置文件?我不熟悉JPA,也许这些可以帮助我:GetSingResult返回的是一个对象而不是一个值。你必须将它转换为你期望的BigInt或Integer对象,这取决于你的设置。你有没有检查过它,看看它返回了什么对象?在你的另一篇文章中,你给出了你的代码,Employee类的id是一个很长的。。。所以只要把结果转换成一个长的…ye,这是旧的,我把它改成int。感谢通知我将编辑旧的post@Yanflea对象测试=em.createQueryFromEmployee,其中bsn='398723917'。getSingleResult;System.out.printtest.toString;返回:com.jmonks.timereg.domain。Employee@670eab4