Спящий режим с пакетной выборкой для отложенной загрузки

#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. Тем не менее, он перезаписывает настройки ожидания. Мой вопрос заключается в том, возможно или нет, чтобы эти настройки сосуществовали и устанавливались программно.