0

我有这种类型的错误。原因是因为我使用的是 sessionFactory bean 和 transactionmanager。基本上我用谷歌搜索并说将列设置为 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;
}
4

3 回答 3

1

可能是交易问题。标记获取用户并使用注释检查其角色的方法(或测试)@Transactional。检索用户后,数据库会话将关闭。因此,当您尝试获取用户的角色时,您会收到“没有会话或会话已关闭”错误。

提供更多信息(例如调用方法代码列表)是必须知道的。

于 2013-09-26T12:49:30.270 回答
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) 将解决 Fetch Type 的问题:LAZY

于 2014-11-20T12:05:08.087 回答
0

我会尝试Hibernate.initialize( pojo.getRoles() );在关闭 Hibernate 会话之前做。

于 2012-12-04T15:41:06.170 回答