Hibernate:懒得初始化一个集合

时间:2014-05-29 11:52:08

标签: java hibernate jpa many-to-many lazy-loading

我有两个实体:用户和模块使用多对多链接。

在我的用户实体中,我有一个模块列表成员:

enter image description here

我成功插入了一个新用户,但是当我想要检索用户时,我获得了用户信息,但我没有得到用户的模块。我收到此错误消息:

.hibernate.LazyInitializationException:懒得初始化角色集合:ma.propar.FireApp.Entites.Utilisateur.modules,无法初始化代理 - 没有会话

2 个答案:

答案 0 :(得分:1)

默认情况下,user.modules @ManyToMany列表为LAZY,因此当您抓取users时,您只会获得user.modules代理。

如果Hibernate Session已关闭,则在未获取LazyInitializationException的情况下,您将无法访问未初始化的代理。

要在同一个HQL查询中获取模块,您需要使用“fetch”:

select u from Utilisateur u left join fetch u.modules

虽然您可以将关联设置为FetchType.EAGER,以便始终沿用户

检索模块
@ManyToMany(fetch=FetchType.EAGER)

shouldn't use EAGER because it's bad for performance

答案 1 :(得分:0)

捎带弗拉德的答案,注释可以用

实现提取
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@ManyToMany(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
@Fetch(FetchMode.SELECT)