web-dev-qa-db-fra.com

Hibernate: Comment obtenir le résultat d'une requête avec plusieurs classes

Si ma requête contient une classe, comme: 

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

alors je l'itère, où queryResult est un objet de la classe User.

Alors, comment obtenir le résultat d'une requête contenant plus d'une classe? Par exemple: 

select u, g from User as u, Group as g where u.groupId = g.groupId and g.groupId = 1
25
yaya
for (Object[] result : query.list()) {
    User user = (User) result[0];
    Group group = (Group) result[1];
}
28
PonomarevMM

Vous pouvez le faire en utilisant Tuples, je crois, mais plus important encore, si votre groupe et votre utilisateur sont liés, comme cette requête semble suggérer que l’utilisateur devrait avoir un champ Groupe (n’utilisez pas groupId dans votre classe d’utilisateur, hibernate devrait régler cela pour vous ). Si c'est le cas, vous pouvez simplement l'interroger à l'aide de select u from User u join fetch u.group g where g.groupId = :id (puis définissez l'ID à l'aide de query.setParameter(1, id);.

Le mot clé fetch de cette requête en fait un chargement enthousiaste. Les deux objets sont renvoyés en veille prolongée, ce qui vous renvoie l'objet User. Accédez à l'objet Group à l'aide de user.getGroup ().

6
Thor84no

Lorsque vous sélectionnez une seule entité, query.list() renverra une List de Object contenant vos entités.

Lorsque vous sélectionnez plusieurs entités, query.list() renverra une List de Object[]. Chaque élément du tableau représente une entité séparée.

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

4
Luka Klepec

Aussi, vous pouvez créer un constructeur et retourner un objet: 

En supposant que la classe Family ait un constructeur approprié - en tant qu'objet Java typé réel:

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

Ou une liste:

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

0
Jason Glez