解决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);
[color=red]mainSheet.getKeywords().size();//将延时加载的对象加载一遍[/color]
return mainSheet;

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

问题解决OK。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值