Hibernate检索策略

本文介绍了Hibernate中的检索策略,包括立即检索和延迟检索的概念,并详细解释了关联级别的延迟加载配置方式,通过fetch和lazy属性的不同设置来实现不同场景下的数据加载需求。

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

-------------------siwuxie095

   

   

   

   

   

   

   

Hibernate 检索策略

   

   

以客户和联系人为例(下同)

   

   

1、Hibernate 检索策略分为两类

   

1立即检索

   

如:根据 id 查询,调用 get() 方法,一调用 get() 方法,

马上发送 sql 语句查询数据库

   

   

   

   

2延迟检索

   

如:根据 id 查询,还有 load() 方法,调用 load() 方法,

不会马上发送 sql 语句查询数据库。只有在得到对象中的

值时,才会发送 sql 语句查询数据库

   

   

   

   

   

   

2、延迟检索也分为两类

   

1类级别延迟

   

如:根据 id 查询,调用 load() 方法,返回实体类对象,

不会马上发送 sql 语句

   

   

   

2关联级别延迟

   

如:查询某个客户,再查询这个客户的所有联系人,查

询客户的所有联系人的过程是否需要延迟,称这个过程

为关联级别延迟

   

   

   

   

   

   

3、关联级别延迟操作

   

1)在映射配置文件中进行配置

   

如:根据客户得到所有联系人,需要在客户的映射配置文件中进行配置

   

   

   

2)在 set 标签上配置两个属性

   

1fetch 属性:默认为 select

   

2lazy 属性:true:延迟(默认);false:不延迟;extra:加强延迟,极其懒惰

   

   

   

3)默认情况下,延迟

   

   

   

   

   

4)lazy 的值为 false 时,调用 get() 方法,直接发送两

条 sql 语句,不延迟(一般不使用 false,效率低)

   

   

   

   

   

5)lazy 的值为 extra 时,要什么值就只给什么值,

加强延迟,极其懒惰,效率高

   

   

   

   

   

   

   

   

   

   

补:

   

set 标签上的 fetch lazy 属性

   

   

   

   

   

   

   

many-to-one 标签上的 fetch lazy 属性

   

   

   

   

   

总结:

   

fetch 主要控制抓取关联对象时,发送的 sql 语句的格式

   

lazy 主要控制查询关联对象时,是否采用延迟加载

   

fetch 如果设置为 join,lazy 就会失效

   

   

   

   

   

   

   

   

   

【made by siwuxie095】

转载于:https://www.cnblogs.com/siwuxie095/p/7302639.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值