hibernate 懒加载

本文深入探讨了懒加载机制及其在Hibernate框架中的应用,包括类级别、属性级别的懒加载配置,以及懒加载可能引发的LazyInitializationException异常的解决办法。此外,文章还详细解释了额外策略(extra策略)如何进一步延迟Customer对象的orders集合代理实例的初始化时机。

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

懒加载:
也叫延迟加载,不是在执行获取操作时马上生成SQL,而是在第一次使用时生成SQL。
分成两种:
类级别的:
<class ... lazy="true/false">
属性级别的:
<set/list/map/bag ... lazy="...">
<many-to-one ... lazy="...">
<one-to-one ... lazy="...">
在使用懒加载特性时,可能会有LazyInitializationException异常:
原因:
真正的去获取数据时,Session已经没有了。
解决办法:
方式一:让Session在真正加载后再关闭。

方式二:或是在Sessoin关闭前执行Hibernate.initialize(department.getEmployees());


extra策略:
与 lazy=“true” 类似. 主要区别是增强延迟检索策略能进一步延迟 Customer 对象的 orders 集合代理实例的初始化时机:
当程序第一次访问 orders 属性的 iterator() 方法时, 会导致 orders 集合代理类实例的初始化
当程序第一次访问 order 属性的 size(), contains() 和 isEmpty() 方法时, Hibernate 不会初始化 orders 集合类的实例, 仅通过特定的 select 语句查询必要的信息, 不会检索所有的 Order 对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值