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

时间:2012-02-24 09:01:51

标签: java hibernate postgresql

我设置了这个简单的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查询有什么问题吗?

回答: 选择查询没有任何问题我只需要使用getSingeResult()而不是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);

这是我的问题的完整解决方案,但我受到了Yanflea的启发,所以他应该得到所有的学分。

1 个答案:

答案 0 :(得分:3)

您正在使用方法 getFirstResult(),它为您提供表中记录的位置。您应该使用 getSingleResult()。请参阅http://docs.oracle.com/javaee/6/api/javax/persistence/Query.html

编辑

这是:

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