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

Si ma requête contient une classe, comme ceci:

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

puis-je effectuer une itération, où queryResult est un objet de User classe.

alors comment obtenir le résultat d'une requête qui contient 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
24
demandé sur Tom11 2011-10-27 11:53:17

4 réponses

for (Object[] result : query.list()) {
    User user = (User) result[0];
    Group group = (Group) result[1];
}
26
répondu PonomarevMM 2017-02-27 20:56:33

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

fetch mot-clé dans cette requête le rend une charge impatiente de sorte que les deux objets seront retournés à hibernate qui retournera l'objet de L'utilisateur à vous. Accédez à l'objet Group en utilisant user.getGroup ().

6
répondu Thor84no 2011-10-27 09:31:47

Lorsque vous sélectionnez une entité unique, query.list() retour ListObject contenant vos entités.

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

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

4
répondu Luka Klepec 2016-02-01 14:38:36

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

en supposant que la famille de classes a un constructeur approprié - comme un objet Java de typesafe 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
répondu Jason Glez 2017-02-24 15:56:59