我得到这个简单的Hibernate查询成立,但它没有返回值,这里是我的代码: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不喜欢我的方式实现选择查询,没有人知道我的选择查询有什么问题吗?
答案: 没有什么错的选择查询我不得不使用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启发。
也许[这个问题](http://stackoverflow.com/questions/2110809/use-of-entitymanager-createnativequeryquery-foo-class ) 可以帮助。即尝试使用'BigDecimal'而不是'long' – hage 2012-02-24 09:17:06
谢谢,但我已经删除了表并让它以普通整数而不是长(Java)/ bigint(SQL语言)重新生成。因此表中的bigint更改为int,并且employee类中的id也更改为int。 ps。我更新了我的代码 – Ben 2012-02-24 09:48:53
您可以在log4j中打开“Hibernate.SQL”来查看哪个sql被执行? – Firo 2012-02-24 09:59:42