Как отключить ленивую загрузку в Hibernate? Я использую аннотации сохранения, а не файл hbm xml.
Я извлекаю один объект по идентификатору и хочу, чтобы все свойства были загружены. Сеанс закрывается до того, как я использую объект.
Спасибо!
Как отключить ленивую загрузку в Hibernate? Я использую аннотации сохранения, а не файл hbm xml.
Я извлекаю один объект по идентификатору и хочу, чтобы все свойства были загружены. Сеанс закрывается до того, как я использую объект.
Спасибо!
Вам нужно аннотировать свойства, которые вы хотите нелениво загружать с помощью FetchType.EAGER.
@ManyToOne(fetch = FetchType.EAGER)
Видите ли, лениво загружается не тот объект, который вы загружаете. Скорее, ассоциации этого объекта ленивы, и вам нужно сказать им, чтобы они не были такими, если это желаемое поведение.
Если у этих объектов также есть ассоциации, которые вы хотите быстро загрузить, вам также необходимо аннотировать их.
Вы можете указать fetch = FetchType.EAGER
для всех ваших ассоциаций рекурсивно, но это загрузит целую кучу данных, которые вас, вероятно, не интересуют.
Обычно лучше разрешить всем ассоциациям OneToMany и ManyToMany, по крайней мере, LAZY (это значение по умолчанию) и инициализировать их перед закрытием сеанса, если они нужны вашему варианту использования (или даже загрузить их с помощью специального запроса).
Связи OneToOne и ManyToOne по умолчанию являются EAGER, и это уже часто генерирует слишком много запросов. Обычно я предпочитаю помечать все как ленивый, если только все варианты использования не должны получать ассоциацию.
Используйте fetch = FetchType.EAGER для всех коллекций и объектов, которые вы хотите отключить.
Также проверьте это: http://techblog.bozho.net/?p=645