Wenn meine Abfrage eine Klasse enthält, wie:
query = session.createQuery("select u from User as u");
queryResult = query.list();
dann iteriere ich es, wobei queryResult
ein Objekt der User
-Klasse ist.
Wie erhält man ein Ergebnis aus einer Abfrage, die mehr als eine Klasse enthält? Zum Beispiel:
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];
}
Sie können dies mit Hilfe von Tupeln tun, die meiner Meinung nach hilfreich sind. Wenn Ihre Gruppe und Ihr Benutzer jedoch verwandt sind, scheint die Abfrage darauf hinzuweisen, dass der Benutzer ein Gruppenfeld haben sollte (verwenden Sie nicht groupId in Ihrer Klasse "User") ). Wenn dies der Fall ist, können Sie es einfach mit select u from User u join fetch u.group g where g.groupId = :id
abfragen (und dann die ID mit query.setParameter(1, id);
einstellen.
Das fetch
-Schlüsselwort in dieser Abfrage macht es zu einer eifrigen Last, sodass beide Objekte in den Ruhezustand versetzt werden, wodurch das Benutzerobjekt an Sie zurückgegeben wird. Greifen Sie mit user.getGroup () auf das Group-Objekt zu.
Wenn Sie eine einzelne Entität auswählen, gibt query.list()
eine List
von Object
zurück, die Ihre Entitäten enthält.
Wenn Sie mehrere Entitäten auswählen, gibt query.list()
eine List
von Object[]
zurück. Jedes Element des Arrays stellt eine separate Entität wieder her.
Lesen Sie hier mehr: http://docs.jboss.org/hibernate/core/3.3/reference/de/html/queryhql.html#queryhql-select
Sie können auch einen Konstruktor erstellen und ein Objekt zurückgeben:
Angenommen, die Klasse Family hat einen geeigneten Konstruktor - als typsicheres Java-Objekt:
select new Family(mother, mate, offspr)
from DomesticCat as mother
join mother.mate as mate
left join mother.kittens as offspr
Oder eine 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/de/html/queryhql.html#queryhql-select