Hibernate 检索策略属性

一.在<class name="cn.edu.sdut.hibernate.manytoone.Customer" table="CUSTOMERS" lazy="true">里面设置lazy属性,

如果是true是指延迟检索,如果是false是立即检索

注意:这个属性只适用于session.load()方法,对于session.get()方法和hql查询都是立即检索也就是不起作用

二.一对多和多对多的检索策略

1.在set中使用lazy属性,lazy取值为false时是指立即检索,是true时是指延迟检索,是extra时是指增强延迟检索

当使用延迟检索时可以通过 Hibernate.initialize() 静态方法显式初始化,比如:Hibernate.initialize(customer.getSet());

2.<set> 元素有一个 batch-size 属性, 用来为延迟检索策略或立即检索策略设定批量检索的数量. 批量检索能减少 SELECT 

语句的数目, 提高延迟检索或立即检索的运行性能.比如:batch-size=3

3.在set里面设置fetch属性: 取值为 “select” 或 “subselect” 时, 决定初始化 orders 的查询语句的形式;

set 集合的 fetch 属性: 确定初始化 orders 集合的方式. 

①.默认值为 select. 通过正常的方式来初始化 set 元素,lazy和batch-size都起作用

②.可以取值为 subselect. 通过子查询的方式来初始化所有的 set 集合.lazy起作用而batch-size失效

③.若取值为 join. 则在加载 1 的一端的对象时, 使用迫切左外连接(使用左外链接进行查询, 且把集合属

性进行初始化)的方式检索 n 的一端的集合属性,lazy失效而batch-size起作用(HQL 查询忽略 fetch=join 的取值)

三.多对一和一对一关联的检索策略

1.在<many-to-one  lazy="false"></many-to-one>里面使用lazy属性,lazy 取值为 proxy 和 false 分别代表对应对应的

属性采用延迟检索和立即检索

2.在<many-to-one  lazy="false"></many-to-one>里面使用fetch属性,只能去select和join值

①..默认值为 join. 使用迫切左外连接(使用左外链接进行查询, 忽略 lazy 属性. 而batch-size起作用(HQL 查询忽略 fetch=join 的取值)

②.使用select时lazy和batch-size都起作用

3.使用batch-size时,该属性需要设置在 1 那一端的 class 元素中: <class name="Customer" table="CUSTOMERS" lazy="true" batch-size="5">

作用: 一次初始化 1 的这一段代理对象的个数. 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值