Спящий режим: включение ленивой выборки в API критериев
Я пишу запрос против модели домена, где (по какой-либо причине) ассоциация "один ко многим" сопоставляется с lazy = "false". В моем конкретном запросе я предпочел бы получить эту коллекцию лениво, потому что меня не интересует ее содержимое. Как я могу использовать ленту для моего конкретного запроса? Возможно ли это вообще?
До сих пор я смотрел на Criteria.setFetchMode
, но FetchMode.LAZY
- это просто устаревший псевдоним для FetchMode.SELECT
...
Изменение сопоставления, вероятно, было бы идеальным, но я бы не рискнул повлиять на существующие запросы.
Изменить: мы используем Hibernate 3.3.2
Ответы
Ответ 1
Я сам не специалист, но просмотр книги Hibernate и консультации с коллегой не дали мне никакого намека на то, что это было бы возможно, скорее наоборот.
Ваша, кажется, необычная ситуация, не покрытая Hibernate. Типичным примером использования является обратное: использовать ленивую выборку по умолчанию и выборочно разрешать выборку запросов для запросов, где это оправдано.
Ответ 2
Принятый ответ неверен. Hibernate позволяет вам ленить выборку в критериях того, что по умолчанию является желательным при сопоставлении. Просто позвоните
criteria.setFetchMode("propertyName", FetchMode.SELECT);
Я пробовал это, и он сработал. FetchMode.LAZY отмечен устаревшим в исходном коде, и все, что он делает, указывает на FetchMode.SELECT
Спящий код:
public static final FetchMode LAZY = SELECT;
Ответ 3
Если кто-то наткнется на это (как и я), обратитесь к этому. Похоже, что это была ошибка документации Hibernate, а FetchMode.SELECT
вызывает ленивую загрузку.