hibernate检索策略(关于映射部分)

近段时间在读孙维琴的《精通hibernate》,感觉收获不少,对于hibernate 检索策略的第一部分,感觉其实就是几张表,如果把几张表搞清楚了,其他的也就无所谓了,幸而书中总结的很好,就摘录如下:
注意:此版本主要是基于hibernate2.x版本。

类级别和关联级别可选的检索策略和默认的检索策略
 
检索策略的作用域
可选的检索策略
默认的检索策略
运行时行为受影响的 sesssion 的检索方法
类级别
立即检索
延迟检索
立即检索
仅影响 load() 方法
关联级别
立即检索
延迟检索
迫切左外连接检索
多对一和一对一关联为外连接检索
影响 load(),get(),find() 方法
一对多和多对多关联为立即检索
                      
三种检索策略的运行机制

检索策略的类型
类级别
关联级别
优点
缺点
优先考虑使用的场合
立即检索
立即加载检索方法指定的对象
立即加载与检索方法指定的对象关联的对象,可以设定批量检索数量
对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地从一个对象导航到与它关联的对象
1 select 语句数目多;( 2 )可能会加载应用程序不需要访问的对象,造成内存空间的浪费
1 )类级别( 2 )应用程序需要立即访问的对象( 3 )使用了二级缓存
延迟检索
延迟加载检索方法指定的对象
延迟加载与检索方法指定的对象,可以设定批量检索数量
由应用程序决定需要加载那些对象,可以避免执行多余的 select 语句,以及避免加载应用程序不需要访问的对象。因此提高检索性能,并能节省内存空间
应用程序如果希望访问游离状态的代理类实例,必须保证它在持久化状态时已经被初始化
1 )一对多或多对多关联( 2 )应用程序不需要立即访问或者根本不会访问的对象
迫切左外连接检索
不适用
通过左外连接加载与检索方法指定的对象
1 )对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地从一个对象导航到与它关联的对象( 2 )使用了外连接, select 语句数目少
1 )可能会加载应用程序不需要访问的对象,造成内存空间的浪费( 2 )复杂的数据表连接也会影响检索性能
1 )多对一或一对一关联( 2 )应用程序需要立即访问的对象( 3 )数据库系统具有良好的表连接性能
                         
  映射文件中用于设定检索策略的几个属性
 
属性
可选值
默认值
描述
lazy
true false
hibernate2.x 版本为 false
hibernate3.x 版本为 true
如果为 true ,表示使用延迟策略。在 <class> <set> 中包含此属性
outer-join
auto true false
<many-to-one> <one-to-one> 元素中为 auto; <set> 元素中为 false
如果为 true ,表示使用迫切左外连接检索。在 <many-to-one> <one-to-one> <set> 元素中包含此属性
batch-size
正整数
1
设定批量检索的数量。如果设定此项,合理的取值在 3~10 之间。仅适用于关联级别的立即检索和延迟检索,在 <class> <set> 元素中包含此属性
 
Set 元素的 lazy outer-join 属性
lazy 属性
outer-join 属性
检索策略
false
true
采用立即检索,这是默认的检索策略,当使用 hibernate 二级缓存可以考虑使用立即检索
false
false
采用迫切左外连接检索。对于 hibernate2.x 版本,在映射文件中如果有多个 <set> 元素,只允许有一个 <set> 元素的 outer-join 属性为 true
true
false
采用延迟检索。这是优先考虑的检索策略
true
true
没有任何意义
设置多对一关联的检索策略
( 以客户和订单为例 )
Order.hbm.xml <many-to-one> 元素的 outer-join 属性
Customer.hbm.xml <calss> 元素的 lazy 属性
检索 order 对象时,对关联的 customer 对象使用的检索策略
auto
true
延迟检索
auto
false
迫切左外连接检索
true
true
迫切左外连接检索
true
false
迫切左外连接检索
false
true
延迟检索
false
false
立即检索
 

    
1默认情况下,Hibernate 3对集合使用延迟select抓取,对返回单值的关联使用延迟代理抓取。
2 Hibernate2.1 中, lazy 属性的默认值为 “false” ,而在 Hibernate3.0 中, lazy 属性的默认值为 “true”
3 FetchMode.LAZY FetchMode.EAGER 被废弃。取而代之的分别为 FetchMode.SELECT FetchMode.JOIN
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值