hibernate一对多出现failed to lazily initialize a collec

本文介绍了解决Hibernate在一对多关系中出现的懒加载异常的方法。通过修改配置文件中的lazy属性为false或者采用join fetch策略,可以有效避免异常的发生,并确保数据的一致性和完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hibernate一对多出现failed to lazily initialize a collection of role异常!
1.这是关于延迟加载的问题
<set name="news" inverse="true">
<key column="typeId"></key>
<one-to-many class="com.auj.sshdemo.bean.News"/>
</set>
改成:
<set name="news" inverse="true" cascode="all" lazy="false">
<key column="typeId"></key>
<one-to-many class="com.auj.sshdemo.bean.News"/>
</set>

cascode="all"
这也就使用了级联,代表在你查询主表的数据的时候,也去查询子表的数据。设置成all也就代表对主表的select,delete,update,save的时候,也要对进行相应的操作。在hibernate的session在假如以查询来讲,当你查询了主表的完成后,session关闭。这是字表的数据没有去数据库中查询。所以会报错!
lazy="false”
加上这个也就代表了非延迟加载,这样session也就不会关闭。


cascode的设置要根据需要使用,主要是考虑效率问题!
解决方案二:
<set name="news" inverse="true" cascode="all" fetch="join">
<key column="typeId"></key>
<one-to-many class="com.auj.sshdemo.bean.News"/>
</set>
这样就会执行一条表连接语句,避免问题的出现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值