Запрос спящего объекта с двумя коллекциями «один ко многим» - PullRequest
2 голосов
/ 11 февраля 2011

Я выбираю количество (x) объектов Foo, используя Hibernate.У каждого foo есть панель коллекций «один ко многим» и база, которые настроены на ленивую выборку.Мне нужно будет заполнять bar и baz для каждого foo, поэтому я определенно не хочу, чтобы для каждой коллекции выдавался подвыбор (2 * x + 1 выбор).

Однако я также не обязательно хочуsetFetchMode (FetchMode.JOIN) на обоих, потому что это вернет декартово произведение (bar x baz).Кроме того, если я определю foo и bar как списки, я получу дубликаты.Я могу выдать два критерия:

List<Foo> foos;
foo = session.createCriteria(Foo.class).setFetchMode("bar", FetchMode.JOIN).list();
foo = session.createCriteria(Foo.class).setFetchMode("baz", FetchMode.JOIN).list();

, но код выглядит довольно неаккуратно.Похоже, первый запрос был ненужным.Есть ли более аккуратный способ получить как бар, так и баз?

1 Ответ

1 голос
/ 11 февраля 2011

Я бы сбросил критерии и использовал бы для этого HQL.

String hql = "select new list(foo.bar, foo.baz) from Foo foo";
Query query = session.createQuery(hql);
List list = query.list;
Bar bar = list.get(0);
Baz baz = list.get(1);

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...