web-dev-qa-db-ger.com

Ruhezustand: So erhalten Sie ein Ergebnis aus einer Abfrage mit mehreren Klassen

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

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.

6
Thor84no

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

4
Luka Klepec

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

0
Jason Glez