2012-02-24 115 views
1

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

+0

也許[這個問題](http://stackoverflow.com/questions/2110809/use-of-entitymanager-createnativequeryquery-foo-class ) 可以幫助。即嘗試使用'BigDecimal'而不是'long' – hage 2012-02-24 09:17:06

+0

謝謝,但我已經刪除了表並讓它以普通整數而不是長(Java)/ bigint(SQL語言)重新生成。因此表中的bigint更改爲int,並且employee類中的id也更改爲int。 ps。我更新了我的代碼 – Ben 2012-02-24 09:48:53

+0

您可以在log4j中打開「Hibernate.SQL」來查看哪個sql被執行? – Firo 2012-02-24 09:59:42

回答

2

您正在使用方法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(); 
+0

getSingeResult()re變成一個對象不是一個價值。 – Ben 2012-02-24 13:11:56

+0

您必須將其投射到您期望的對象(BigInt或Integer,取決於您的設置)。你是否檢查過它,看看它返回了什麼對象? – Andre 2012-02-24 13:15:31

+0

在你的其他職位 - 你給你的代碼的地方,id爲Employee類是一個Long ...所以只需將結果投入Long ... – Yanflea 2012-02-24 13:24:09