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
for (Object[] result : query.list()) {
User user = (User) result[0];
Group group = (Group) result[1];
}
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 ().
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
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