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

Спящий режим: включение ленивой выборки в API критериев

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

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

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

Изменить: мы используем Hibernate 3.3.2

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Спящий код:

public static final FetchMode LAZY = SELECT;

Ответ 3

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