我遇到了这种类型的错误。原因是因为我正在使用sessionFactory beand和transactionmanager。基本上我用google搜索并说将列设置为FetchType.EAGER。 但即使我这样做了,它仍然显示出同样的错误,就好像什么也没发生一样。请帮忙。
谢谢
错误: org.hibernate.LazyInitializationException:懒得初始化一个角色集合:com.database.entity.User.roles,没有关闭会话或会话
POJOS:
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="user")
public Set<Role> getRoles() {
return this.roles;
}
答案 0 :(得分:1)
这可能是一个交易问题。标记提取用户并使用注释@Transactional
检查其角色的方法(或测试)。检索用户后,将关闭数据库会话。因此,当您尝试获取用户的角色时,您会收到“无会话或会话已关闭”错误。
必须提供更多信息(例如调用方法代码列表)才能确定。
答案 1 :(得分:0)
在关闭Hibernate会话之前,我会尝试Hibernate.initialize( pojo.getRoles() );
。
答案 2 :(得分:0)
可能在你提到的LAZY的角色侧映射中,你在这里提到了EAGER。这就是为什么它可能会给出错误。 我认为,对此的实际解决方案是......给LAZY而不是给予EAGER并使用 状态,Hibernate.initialize(yourset);在您想要加载此集的DAO实现中。在我的情况下,我使用findById加载集:
@Override
public Branch findByBranchId(Long id) {
Branch branch=findById(id);
Hibernate.initialize(branch);
Hibernate.initialize(branch.getEmployeeSet());
return branch;
}
Hibernate.initialize(SetYouWantToFetch)将解决您使用获取类型问题:LAZY