2012-09-14 7 views
17

Czy wykonanie zapytania zawsze musi zwrócić listę? Jak mogę zamienić poniższy kod, jeśli jestem pewien, że zwróci on tylko pojedynczy obiekt?Jak zwrócić pojedynczy obiekt wynikowy z zapytania dotyczącego hibernacji?

@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; 
    } 

Odpowiedz

20

Możesz użyć Query#uniqueResult() z Hibernate, jeśli się nie mylę. Myślę, że tego właśnie szukasz. W takim przypadku musisz obsłużyć kod NonUniqueResultException w swoim kodzie, jeśli z zapytania pochodzi więcej niż jeden wiersz.

3

Można użyć

query.getSingleResult(); 

gdy jesteś absolutnie pewien, że kwerenda będzie zwracać tylko jeden wiersz, a ja mówię o

import javax.persistence.Query; 
0

Jeśli ładujesz przez id (PK), ponieważ wydaje się, że jesteś tutaj, naprawdę powinieneś użyć Session.load/Session.get zamiast tego.

Powiązane problemy