2011-09-16 78 views
8

選擇從數據庫單一項目這是我的DAO:與Spring的SessionFactory

public List<Weather> getCurrentWeather() { 
    return sessionFactory.getCurrentSession().createQuery("from Weather").list(); 
} 

這得到所有從表天氣的元素。但可以說我想要做這樣的事(我想從表天氣只有一個元素):

public Weather getCurrentWeather() {  
    return sessionFactory.getCurrentSession().createQuery("from Weather where id = 1").list(); // here should be something else than list() 
} 

我知道不應該在年底list(),但我必須在裏面寫了什麼,得到只有一個對象?

回答

11

如果你有一個id,你只是用得到:

public Weather getCurrentWeather() {  
    return sessionFactory.getCurrentSession().get(Weather.class, 1); 
} 

如果你需要做一個查詢,是你必須搶在結果集的頂部,也可以使用uniqueResult()查詢。

+1

UniqueResult()是一個對象,你會如何處理天氣和普通對象的區別?我應該瘋狂地把它投向天氣嗎?或者有更合適的方法? – Jaanus

+2

是的,你投了它。使用查詢編譯時間類型安全性是沒有的。編譯器應該如何知道你的HQL語句最終會創建什麼? – Affe

+0

但是,當我有別的東西比ID,例如一些整數字段,這是否工作? – Jaanus

7

獲取列表有什麼問題嗎? :)即使你知道只有一個hibernate不能假設這一點。無論如何,獲取列表更安全!

public Weather getCurrentWeather() {  
    List<Weather> list = sessionFactory.getCurrentSession().createQuery("from Weather where id = 1").list(); // here should be something else than list() 
    return (list.isEmpty() ? null : list.get(0)); 
} 
+0

是的,我想過要獲得列表,但我想是否有也是另一種方式。儘管如此,我應該如何處理DAO中從List到Weather的變化,或者只是在我的視圖中處理它,通過獲取列表的第一個元素?這將是正確的使用? – Jaanus

+0

嗯,這真的取決於你,但除非你想讓列表始終返回到你的視圖,否則我會在DAO級別執行此操作。此外,方法名稱建議您只需要當前天氣,以便稍後使用您的代碼的其他人可能會對列表返回的原因感到困惑 –

0

您需要使用標準的API如下:

List<LeaveManagement> leaveManagements =  session.createCriteria(LeaveManagement.class) 
      .add(Restrictions.isNull("approvedTimeStamp")) 
      .list(); 

    If you want to write a hql query you can write as: 

    String hql = "from LeaveManagement where approvedTimeStamp is null"; 
     Query query = session.createQuery(hql); 
     List results = query.list(); 
相關問題