Подтвердить что ты не робот

Hibernate: как получить результат запроса с несколькими классами

Если мой запрос содержит один класс, например:

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
4b9b3361

Ответ 1

for (Object[] result : query.list()) {
    User user = (User) result[0];
    Group group = (Group) result[1];
}

Ответ 2

Вы можете сделать это с помощью 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().

Ответ 3

Когда вы выбираете один объект, query.list() возвращает List из Object, содержащий ваши сущности.

При выборе нескольких объектов query.list() вернет List из Object[]. Каждый элемент массива представляет отдельный объект.

Подробнее здесь: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select

Ответ 4

Также вы можете создать конструктор и вернуть объект:

Предполагая, что класс 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