2011-10-27 8 views
22

Jeśli moje zapytanie zawiera jedną klasę, jak:Hibernacja: Jak uzyskać wynik z zapytania z wieloma klasami

query = session.createQuery("select u from User as u"); 
queryResult = query.list(); 

potem iteracyjne go, gdzie queryResult Przedmiotem User klasie.

Jak uzyskać wyniki z zapytania zawierającego więcej niż jedną klasę? Na przykład:

select u, g from User as u, Group as g where u.groupId = g.groupId and g.groupId = 1 
+1

Najlepsza odpowiedź tutaj http://stackoverflow.com/questions/5435304/how-to-override-hibernate-fetching-strategy-at-ruime –

Odpowiedz

25
for (Object[] result : query.list()) { 
    User user = (User) result[0]; 
    Group group = (Group) result[1]; 
} 
+2

dzięki! ale 'List ' musi być – yaya

5

Można to zrobić za pomocą Krotki wierzę, ale co ważniejsze, jeśli grupa i użytkownik jest związany jak tego zapytania wydaje się sugerować, użytkownik powinien mieć równe grupy (nie używać w swojej GroupID Klasa użytkownika, hibernacja powinna to dla ciebie rozwiązać). Jeśli tak jest w przypadku można po prostu zapytać go za pomocą select u from User u join fetch u.group g where g.groupId = :id (wtedy ustawić identyfikator używając query.setParameter(1, id);.

fetch kluczowe w tym zapytaniu sprawia, że ​​jest chętny obciążenie więc oba obiekty zostaną zwrócone do hibernacji, która zwróci obiekt użytkownika do ciebie . dostęp do obiektu grupie stosującej user.getGroup().

+0

Myślę, że to jest właściwa droga, ale ja miałem jakiś parser błędy: spodziewałem się "wszystkich", odnalazłem 'join' i oczekiwałem "by", znalazłem 'gdzie' – yaya

+0

To 'join fetch' zamiast' fetch join', mój błąd. Popraw to teraz. – Thor84no

0

Ponadto można utworzyć konstruktora i zwraca obiekt:

zakładając, że klasa Rodzina posiada odpowiedni konstruktor - jako rzeczywiste typesafe obiektu Java:

select new Family(mother, mate, offspr) 
from DomesticCat as mother 
join mother.mate as mate 
left join mother.kittens as offspr 

lub listy:

select new list(mother, offspr, mate.name) 
from DomesticCat as mother 
inner join mother.mate as mate 
left outer join mother.kittens as offspr 

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select