突然“未能懒惰地初始化角色集合......:没有会话或会话被关闭” - 例外

时间:2011-03-18 13:31:33

标签: java mysql hibernate spring jsp

在一个没有任何变化的情况下工作了很长时间的应用程序我得到了异常

failed to lazily initialize a collection of role: ... , no session or session was closed

突然之间,可能的原因是什么?发生这种情况的方法在过去3年中经过测试并成功使用。

感谢您的帮助, 人

P.S。环境:JSP,Spring,Hibernate,MySQL

2 个答案:

答案 0 :(得分:9)

如果你传递一个实体并最终离开它被读取的事务边界,你就无法访问任何尚未初始化的关联(我想你的实体就像Collection<Role> roles)。如果你随后访问roles Hibernate可能会尝试初始化它,但由于事务(以及与它的Hibernate会话)已经关闭,你会得到该异常。

  

在过去的3年中,测试并成功使用了这种方法。

这可能意味着在调用该方法时未初始化集合的情况很少,并且在过去3年内没有发生。

答案 1 :(得分:1)

尝试在web.xml中使用Open Session In View设置。如果您尝试将hibernate对象发送到spring MVC视图并将其恢复,这将有所帮助。

两个选项。

  • 在关闭hibernate会话之前加载所有延迟集合 或
  • 在web.xml中使用OpenSession In View设置