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
4 réponses
for (Object[] result : query.list()) {
User user = (User) result[0];
Group group = (Group) result[1];
}
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 ().
Lorsque vous sélectionnez une entité unique, query.list()
retour List
Object
contenant vos entités.
Lorsque vous sélectionnez plusieurs entités, query.list()
retour List
Object[]
. 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
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