我得到這個簡單的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