У меня есть два объекта: User и Module, которые связаны с многими из многих.
в моем объекте пользователя у меня есть член списка модулей:
Я вставляю нового пользователя успешно, но когда я хочу получить пользователей, я получаю информацию о пользователях, но я не получаю модули пользователя. и я получаю это сообщение об ошибке:
.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию роли: ma.propar.FireApp.Entites.Utilisateur.modules, не удалось инициализировать прокси - нет сеанса
Список user.modules
@ManyToMany
по умолчанию LAZY, поэтому, когда вы выбираете users
вы получаете user.modules
прокси user.modules
.
Если Session
Hibernate закрыт, вы не сможете получить доступ к неинициализированным прокси, не получая LazyInitializationException
.
Для извлечения модулей в одном и том же запросе HQL вам нужно использовать "fetch":
select u from Utilisateur u left join fetch u.modules
Хотя вы можете установить связь с FetchType.EAGER
чтобы вы всегда извлекали модули вдоль пользователей
@ManyToMany(fetch=FetchType.EAGER)
вы не должны использовать EAGER, потому что это плохо для производительности.
Чтобы ответить на ответ Влада, с аннотациями вы можете реализовать выборку с помощью
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@ManyToMany(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
@Fetch(FetchMode.SELECT)