2011-10-27 12 views
22

Se la mia interrogazione contiene una classe, come:Hibernate: Come ottenere il risultato di query con più classi

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

poi iterare esso, dove queryResult è un oggetto di User di classe.

Quindi, come ottenere il risultato dalla query che contiene più di una classe? Per esempio:

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

Miglior risposta è qui http://stackoverflow.com/questions/5435304/how-to-override-hibernate-fetching-strategy-at-runtime –

risposta

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

grazie! ma 'Lista ' deve essere – yaya

5

è possibile farlo usando tuple credo, ma ancora più importante, se il gruppo e l'utente è legato come quella richiesta sembra suggerire l'utente dovrebbe avere un campo Gruppo (non usare groupId nella vostra La classe utente, l'ibernazione dovrebbe risolvere questo problema per te). Se questo è il caso si può semplicemente interrogare utilizzando select u from User u join fetch u.group g where g.groupId = :id (quindi impostare l'id utilizzando query.setParameter(1, id);.

Il fetch parola chiave in quella query lo rende un carico ansiosi in modo da entrambi gli oggetti saranno restituiti al letargo che restituirà l'oggetto d'uso a voi . accedere all'oggetto di gruppo tramite user.getGroup().

+0

penso che questo è il modo giusto, ma ho avuto un po 'di parser errori: in attesa di "tutti", trovato "join" e in attesa "di", trovato "dove" – yaya

+0

È "join fetch" anziché "fetch join", errore mio. Correggendolo adesso. – Thor84no

0

Inoltre è possibile creare un costruttore e restituire un oggetto:

Supponendo che la Famiglia classe ha un appropriato costruttore - come typesafe Java oggetto reale:

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

o un elenco:

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