我们如何正确解决此错误?
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
我很难理解并解决此异常。在我的应用程序中,我需要检索映射到多个表的对象列表。我试着
for(SampleItem item : list) {
// Hibernate.initialize(every item's field)
}
但是继续得到上述错误。我可以像代码一样简单地解决这个问题:
System.out.println(list)
所以我想知道哪种方法更好(优点和缺点)来解决这个异常。我个人认为Hibernate.initialize()会是更好的选择;但不确定为什么(因为hibernate可能会引入这个函数)?
答案 0 :(得分:2)
假设您使用hibernate从数据库中检索了一个名为Movie
的实体,并且该实体具有Actor
个具有属性actors
的实体的集合,那么默认情况下hibernate会加载{{1}的集合懒惰的实体。这意味着Actor
实体的集合属性Movie
被赋予了代理对象。
现在,当您在关闭hibernate会话后尝试访问此代理属性actors
的元素时,您将获得actors
。
要解决此问题,您将有2个选项。
正如Utpal在他的回答中所提到的,你可以为集合属性设置提取策略为LazyInitializationException
。
调用Hibernate.initialize()并传递collection属性,告诉hibernate初始化集合元素。必须在关闭会话之前完成此操作。
答案 1 :(得分:0)
fetch=FetchType.EAGER
尝试使用已映射POJO的地方。