2011-10-27 12 views
22

Si mi consulta contiene una clase, como:Hibernate: Cómo obtener resultado de consulta con múltiples clases

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

entonces iterar ella, donde queryResult Es un objeto de la clase User.

Entonces, ¿cómo obtener el resultado de la consulta que contiene más de una clase? Por ejemplo:

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

La mejor respuesta está aquí http://stackoverflow.com/questions/5435304/how-to-override-hibernate-fetching-strategy-at-runtime –

Respuesta

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

gracias! pero 'List ' debe estar – yaya

5

Usted puede hacer que el uso de tuplas creo, pero lo más importante, si su grupo y de usuario se relaciona como la consulta parece sugerir usuario debe tener un campo de grupo (no utilice en su groupId Clase de usuario, Hibernate debería solucionar esto por ti). Si ese es el caso simplemente puede consultar usando select u from User u join fetch u.group g where g.groupId = :id (a continuación, establecer el ID usando query.setParameter(1, id);.

La palabra clave fetch en esa consulta hace que sea una carga ansiosos por lo que se devolverán ambos objetos para hibernar que devolverá el objeto de usuario que se . Acceder al objeto de grupo mediante user.getGroup().

+0

Creo que esta es la manera correcta, pero tuve algunos analizadores errors: esperando "all", encontrado "join" y esperando "by", found "where" – yaya

+0

Es "join fetch" en lugar de "fetch join", error mío. Corrigiéndolo ahora. – Thor84no

0

También puede crear un constructor y devolver un objeto:

Suponiendo que la familia de la clase tiene un constructor apropiado - como un typesafe Java objeto real:

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

o una lista:

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

Cuestiones relacionadas