`

解决Failed to lazily initialize a collection (原创)

阅读更多
  今天在维护项目维护开发过程中出了个问题。
  报错是:“ Failed to lazily initialize a collection - no session or session was closed”一看这个错误就知道是lazyLoad问题。
  先在网上找了相关问题解决方式,在转载的文章中(http://wujt.iteye.com/admin/blogs/433788)学习一把Hibernate与延迟加载原理。
  在映射文件中“
<bag name="keywordInfos" lazy="true" inverse="false" cascade="all-delete-orphan">
<key column="ACCEPT_RECORD_ID"/>
<one-to-many class="com.hollycrm.unicom.sheet.lightweight.AcceptKeywordInfo"/>
</bag>”
一般解决方式是 lazy="true"该为 lazy="false";
但是这个字段在其他地方用到,是否会影响到其他地方的效率问题不能确认;
参照(http://wujt.iteye.com/admin/blogs/433799)提供的第二种方法解决:
对于查询中如果用的是xxx.load(class,id)则改为xxx,get(class,id)
还是报“ Failed to lazily initialize a collection - no session or session was closed”错误;

便采用地三种方法解决:
HibernateTemplate ht = getHibernateTemplate();
MainSheet mainSheet = (MainSheet) ht.load(MainSheet.class,id); 
mainSheet.getKeywords().size();//将延时加载的对象加载一遍
return mainSheet;

在使用Keywords正常,不会报“ Failed to lazily initialize a collection - no session or session was closed”错误。

问题解决OK。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics