#hibernate #lazy-loading
#гибернация #отложенная загрузка
Вопрос:
В настоящее время я наблюдаю в hbernate3 следующее поведение. если у меня установлен параметр @BatchSize (size = 5), то режим гибернации будет извлекать 5 подмножеств отображаемого типа в одном SQL-запросе.
Если у меня есть .setFetchMode ( «установить», FetchMode.JOIN ); , затем hibernate с готовностью извлекает все подмножества отображаемого типа в одном SQL-запросе.
Однако, когда я устанавливаю .setFetchMode («команды», FetchMode.ВЫБЕРИТЕ ); , тогда hibernate по-прежнему использует пакетную выборку, а не отложенную выборку.
Есть ли способ заставить спящий режим использовать отложенную выборку, когда установлен параметр @BatchSize?
Тот же вопрос относится к when @Fetch(режим выборки.Установлен дополнительный ВЫБОР).
Ответ №1:
Если вы хотите переопределить эти настройки программно, вы можете рассмотреть возможность использования @FetchProfile . Просто создайте @FetchProfile для объекта:
@FetchProfiles({
@FetchProfile(name = "profileName", fetchOverrides = {
@FetchProfile.FetchOverride(entity = YourEntity.class,
association = "anAssociation",
mode = FetchMode.JOIN),
...
})
})
и включите этот профиль в вашем сервисе / методе репозитория, например:
session.enableFetchProfile( "profileName" );
и ваши индивидуальные настройки выборки будут работать для этого сеанса.
Комментарии:
1. это похоже на то, что я ищу. Могу ли я включить / отключить этот профиль между двумя транзакциями в течение одного сеанса?
2. @iliaden Да, вы можете использовать Session#disableFetchProfile(имя профиля), чтобы отключить это в том же сеансе. Вы также можете использовать Session#isFetchProfileEnabled(имя профиля ), чтобы узнать, включен или отключен профиль выборки.
Ответ №2:
Извините, но @BatchSize используется для решения «проблемы N 1», но не для того, чтобы просить объекты загрузки из гибернации загружаться с нетерпением или лениво. Попробуйте выполнить поиск по ключевым словам: «Переход в режим гибернации, проблема n 1, размер пакета».
Комментарии:
1. Я знаю, что это помогает решить проблему N 1. Тем не менее, он перезаписывает настройки ожидания. Мой вопрос заключается в том, возможно или нет, чтобы эти настройки сосуществовали и устанавливались программно.