Ответ 1
for (Object[] result : query.list()) {
User user = (User) result[0];
Group group = (Group) result[1];
}
Если мой запрос содержит один класс, например:
query = session.createQuery("select u from User as u");
queryResult = query.list();
то я повторяю его, где queryResult
является объектом класса User
.
Итак, как получить результат запроса, который содержит более одного класса? Например:
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];
}
Вы можете сделать это с помощью Tuples, я верю, но что более важно, если ваша группа и пользователь связаны как этот запрос, кажется, что у пользователя должно быть поле Group (не используйте groupId в вашем классе User, hibernate должен сортировать это для вас). Если это дело, вы можете просто запросить его с помощью select u from User u join fetch u.group g where g.groupId = :id
(затем установите идентификатор с помощью query.setParameter(1, id);
.
Ключевое слово fetch
в этом запросе делает его загруженным, поэтому оба объекта будут возвращены в спящий режим, который вернет вам объект User. Получите доступ к объекту Group с помощью user.getGroup().
Когда вы выбираете один объект, query.list()
возвращает List
из Object
, содержащий ваши сущности.
При выборе нескольких объектов query.list()
вернет List
из Object[]
. Каждый элемент массива представляет отдельный объект.
Подробнее здесь: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select
Также вы можете создать конструктор и вернуть объект:
Предполагая, что класс Family имеет соответствующий конструктор - как фактический тип Java-объекта:
select new Family(mother, mate, offspr)
from DomesticCat as mother
join mother.mate as mate
left join mother.kittens as offspr
Или список:
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