2012-09-14 42 views
17

查詢執行是否總是返回一個列表?如果我確定它只會返回一個對象,我該如何替換下面的代碼?如何從休眠查詢中返回單個結果對象?

@Override 
    public List<DocInfo> findAllByDocId(String docId) 
    { 
     Query q = getCurrentSession().createQuery("from DocInfo item where item.id = :docId"); 
     q.setString("docId", docId); 
     List<DocInfo> docInfoList = q.list(); 
     return docInfoList; 
    } 

回答

20

如果我沒有錯,你可以使用帶有Hibernate的Query#uniqueResult()。我認爲這就是你要找的。在這種情況下,如果查詢返回多行,則必須在代碼中處理NonUniqueResultException

3

您可以使用

query.getSingleResult(); 

,當你有絕對的把握該查詢只返回一行和我談論

import javax.persistence.Query; 
0

如果您是通過ID(PK)加載,因爲它看起來你在這裏,你真的應該使用Session.load/Session.get來代替。