Загрузка из Hibernate в Lazy Загрузка - PullRequest
4 голосов
/ 09 июня 2011

В настоящее время я наблюдаю в hbernate3 следующее поведение.если у меня установлен @BatchSize (size = 5), то hibernate извлечет 5 подмножеств сопоставленного типа в одном запросе SQL.

Если у меня есть .setFetchMode ("set", FetchMode.JOIN);затем hibernate будет охотно извлекать все подмножества сопоставленного типа в одном запросе SQL.

Однако, когда я устанавливаю .setFetchMode ("commands", FetchMode.SELECT);, тогда hibernate по-прежнему использует пакетную выборку, а не ленивую выборку.

Есть ли способ заставить hibernate использовать ленивую выборку, когда установлен @BatchSize?

Тот же вопрос относится к случаю, когда @Fetch(FetchMode.SUBSELECT) установлен.

Ответы [ 2 ]

7 голосов
/ 17 июня 2011

Если вы хотите переопределить эти настройки программно, вы можете использовать @FetchProfile. Просто создайте @FetchProfile для сущности:

<code>@FetchProfiles({
  @FetchProfile(name = "profileName", fetchOverrides = {
    @FetchProfile.FetchOverride(entity = YourEntity.class, 
                                association = "anAssociation", 
                                mode = FetchMode.JOIN),
...<br>
    })
})<br>
и включите этот профиль в вашем сервисе / методе хранилища, например:

<code>session.enableFetchProfile( "profileName" );
и ваши настроенные параметры выборки будут работать для этого сеанса.
0 голосов
/ 17 июня 2011

Извините, но @ BatchSize используется для решения "проблемы N + 1", но не для того, чтобы просить загруженные объекты Hibernate с нетерпением или ленивостью.Попробуйте выполнить поиск по ключевым словам: «Спящий режим, проблема n + 1, размер пакета».

...