2012-02-23 35 views
0

我是一個新手休眠我希望你們可以幫我解決我的小問題。 我想讓一個值作爲一個值返回,而不是從數據庫返回一個List。我正在使用休眠模式,但我不知道該怎麼做,這是我到目前爲止:返回一個值,而不是表中的列表使用休眠

此主題:Hibernate Return integer value沒有真正幫助我,因爲我不使用會話和查詢。 uniqueResult()對我不起作用,因爲它不能識別uniqueResult()方法,您可以在下面的例子中看到我使用的庫/類/方法。

import java.sql.*; 
import org.hibernate.*; 

import org.hibernate.criterion.*; 
import javax.persistence.Query; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 

public class Persistence 
{ 

public void RegisterWorkHours(TimeRegistration object) 
    { 
     EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("timereg"); 
     EntityManager em = emf.createEntityManager(); 
     String q = "SELECT id FROM tbl_employee WHERE bsn = @bsn"; 
     Query query = em.createQuery(q); 
     query.setParameter("@bsn", object.getEmployee().getBsn()); 

    //And here I want to have a single value being returned as a value and not as a List. 

     em.getTransaction().begin(); 
     em.persist(object); 
     em.getTransaction().commit(); 
     em.close(); 

    } 
} 

問題定義: 的問題是,我在我的Employee類及其auto_incremented定義ID。但是我沒有接受任何安裝程序,因爲我不希望用戶被迫輸入該用戶的唯一標識。但我確實希望能夠從員工表中獲取id,其中bsn等於對象的給定bsn值,以便我可以註冊某個員工(id)在某個項目(id)上工作的小時數。

+0

聽起來像你的'bsn'值不是唯一的,這表明你需要重新訪問你的設計。你爲什麼不使用純粹的JPA? – Perception 2012-02-23 12:13:52

回答

2

javax.persistence.Query接口上沒有uniqueResult()方法(這是您的代碼使用的方法)。要獲得單個結果,請使用getFirstResult()getSingleResult()。但要注意你的情況因爲這些原因,既不是特別有用的:

  • 調用getFirstResult()將返回您的查詢返回的 集合中的第一個元素。這可能是也可能不是您正在尋找的 元素。
  • 調用getUniqueResult()預計查詢返回 正好一個項目,將拋出一個異常,如果返回的集合是空的,或者有一個以上的條目。

如果您bsn值是真正獨一無二的,然後使用getUniqueResult(),但如果沒有,那麼你需要重新審視你的設計。

+0

感謝您的回答,我的bsn值是100%唯一的,所以查詢將只返回一個值,所以我可以使用getUniqueResult()方法,但是我需要添加什麼庫才能使用該函數?而我又有了一個普遍的問題,我如何將PMś發送給其他的計算器用戶? – Ben 2012-02-23 12:57:29

+0

從JPA 1.0開始,查詢類中存在'getUniqueResult()',如果您正在使用'EntityManager'和'EntityManagerFactory',則您已擁有'getUniqueResult()'。至於私人消息,它們不在Stack Overflow上。你可以在http://meta.stackexchange.com上申請加入。 – Perception 2012-02-23 13:04:18

+0

謝謝你是最棒的! – Ben 2012-02-23 13:27:07

相關問題