Отключить ленивую загрузку в спящем режиме

Как отключить ленивую загрузку в Hibernate? Я использую аннотации сохранения, а не файл hbm xml.

Я извлекаю один объект по идентификатору и хочу, чтобы все свойства были загружены. Сеанс закрывается до того, как я использую объект.

Спасибо!


person Jonah    schedule 29.03.2011    source источник
comment
Мое дополнение к этому вопросу: как отключить ленивую загрузку, чтобы вместо прокси появлялись пустые коллекции?   -  person Ondra Žižka    schedule 22.01.2013


Ответы (3)


Вам нужно аннотировать свойства, которые вы хотите нелениво загружать с помощью FetchType.EAGER.

   @ManyToOne(fetch = FetchType.EAGER)

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

Если у этих объектов также есть ассоциации, которые вы хотите быстро загрузить, вам также необходимо аннотировать их.

person Sean Adkinson    schedule 29.03.2011

Вы можете указать fetch = FetchType.EAGER для всех ваших ассоциаций рекурсивно, но это загрузит целую кучу данных, которые вас, вероятно, не интересуют.

Обычно лучше разрешить всем ассоциациям OneToMany и ManyToMany, по крайней мере, LAZY (это значение по умолчанию) и инициализировать их перед закрытием сеанса, если они нужны вашему варианту использования (или даже загрузить их с помощью специального запроса).

Связи OneToOne и ManyToOne по умолчанию являются EAGER, и это уже часто генерирует слишком много запросов. Обычно я предпочитаю помечать все как ленивый, если только все варианты использования не должны получать ассоциацию.

person JB Nizet    schedule 29.03.2011

Используйте fetch = FetchType.EAGER для всех коллекций и объектов, которые вы хотите отключить.

Также проверьте это: http://techblog.bozho.net/?p=645

person Kuntal-G    schedule 17.07.2014