Hibernate setMaxResult для родительского предела дочерней коллекции тоже - PullRequest
2 голосов
/ 08 декабря 2011

У меня есть родительская сущность с дочерней коллекцией @ManyToMany (fetch = FetchType.EAGER).

Мне нужно загрузить только первую найденную запись родительской сущности, поэтому я загружаю ее, используя следующие критерии:

session.createCriteria(Parent.class).setMaxResult(1).uniqueResult();

Работает нормально, но ограничение применяется и к дочерней коллекции, и это очень плохо.

Как я могу получить только первую запись родителя, но всю запись его потомка?

Спасибо

1 Ответ

3 голосов
/ 08 декабря 2011

Просто отметьте коллекцию дочерних элементов как fetch = FetchType.LAZY, не извлекайте ее в запросе и при необходимости инициализируйте коллекцию после запроса:

Parent p = (Parent) session.createCriteria(Parent.class).setMaxResult(1).uniqueResult();
// if necessary:
Hibernate.initialize(p.getChildren());

Если вы действительно хотите сохранить связь какeager fetched (что является плохой идеей, IMO), затем только загрузить идентификатор родителя в запросе, а затем получить родителя:

Long parentId = (Long) session.createCriteria(Parent.class)
                              .setProjection(Projections.id())
                              .setMaxResult(1)
                              .uniqueResult();
Parent p = session.get(Parent.class, parentId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...