Отключить отложенную загрузку в спящем режиме - PullRequest
10 голосов
/ 30 марта 2011

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

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

Спасибо!

Ответы [ 3 ]

6 голосов
/ 30 марта 2011

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

   @ManyToOne(fetch = FetchType.EAGER)

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

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

0 голосов
/ 17 июля 2014

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

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

0 голосов
/ 30 марта 2011

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

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

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

...