Hibernate: Включение отложенной выборки в Criteria API - PullRequest
18 голосов
/ 08 февраля 2010

Я пишу запрос к доменной модели, в которой (по какой-либо причине) сопоставление «один ко многим» отображается с помощью lazy = «false». В моем конкретном запросе я бы предпочел получить эту коллекцию лениво, потому что меня не интересует ее содержимое. Как я могу включить лень для моего конкретного запроса? Возможно ли это вообще?

До сих пор я смотрел на Criteria.setFetchMode, но FetchMode.LAZY - это просто устаревший псевдоним для FetchMode.SELECT ...

Изменение отображения, вероятно, было бы идеальным, но я бы не стал рисковать влиянием на существующие запросы.

Редактировать: Мы используем Hibernate 3.3.2

Ответы [ 3 ]

26 голосов
/ 01 июня 2012

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

criteria.setFetchMode("propertyName", FetchMode.SELECT); 

Я попробовал это, и это сработало. FetchMode.LAZY помечен как устаревший в исходном коде, и все, что он делает, это указывает на FetchMode.SELECT

Код гибернации:

public static final FetchMode LAZY = SELECT;
4 голосов
/ 04 февраля 2012

В случае, если кто-то наткнется на это (как я), пожалуйста, обратитесь к этому . Похоже, что это была ошибка документации Hibernate, и FetchMode.SELECT вызывает ленивую загрузку .

0 голосов
/ 09 февраля 2010

Я сам не эксперт, но просмотр книги Hibernate и консультации с коллегой не дали мне никакого намека на то, что это возможно, скорее наоборот.

Похоже, у вас необычная ситуация, не охваченная Hibernate. Типичный вариант использования противоположен: использовать ленивую выборку по умолчанию и выборочно включать активную выборку для запросов, где это оправдано.

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