Подтвердить что ты не робот

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

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

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

Спасибо!

4b9b3361

Ответ 1

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

   @ManyToOne(fetch = FetchType.EAGER)

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

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

Ответ 2

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

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

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

Ответ 3

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

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