我设置了这个简单的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的启发,所以他应该得到所有的学分。
答案 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();