Hibernate 检索策略 (lazy,batch-size,fetch属性)
来源:互联网 发布:abigail mac 编辑:程序博客网 时间:2024/05/25 01:34
以 customer-order为例
一.类级别的检索策略
customer.hbm.xml
<class name="Customer" table="CUSTOMERS" lazy="true">注意:
1.lazy=false:立即检索,lazy=true:延时检索 默认true
2.lazy属性只对 load 方法有效,对 get,HQL,QBC 均无效。
二.一对多,多对多的检索策略(set 的属性)
customer.hbm.xml
<set name="orders" table="ORDERS" inverse="true" order-by="ORDER_NAME DESC" lazy="true" batch-size="2" fetch="subselect"> <key column="CUSTOMER_ID"></key> <one-to-many class="Order"/> </set>
1.lazy属性
(1)1-n,n-n的集合属性默认使用懒加载
(2)可以通过修改set的lazy属性来修改默认的检索策略,默认为true,并不建议设置为false
(3)lazy还可以设置为extra。增强的延时检索,该取值会尽可能的延迟初始化的时机
lazy设置为true时,应用程序第一次访问集合属性:iterator(),size(),isEmpty(),contains()等方法,会初始化集合的代理类对象。
lazy设置为extra时,
当程序第一次访问 orders属性的iterator()方法时,会导致orders集合代理类实例的初始化,
2.batch-size 批量初始化
set元素的batch-size属性:设定一次初始化set集合的数量。
List<Customer> customers = session.createQuery("FROM Customer").list();System.out.println(customers.size()); for(Customer customer: customers){if(customer.getOrders() != null)System.out.println(customer.getOrders().size());}由于customer.hbm.xml 的 set 中设置了batch-size="2" ,所以查询Customer 的 Orders时,一次将初始化两个set元素
3.fetch属性 决定初始化orders集合的方式
3.1.默认值为select。通过正常的方式来初始化set元素
3.2.可以取值 subselect。 通过子查询的方式来初始化所有的set集合作为where字句的in的条件出现,子查询所有1的一端的ID,此时lazy有效。但batch-size失效
3.3.若取值为join,则
3.3.1 在加载1的一端的对象时,使用迫切左外连接(使用左外连接,且把集合进行初始化)的方式把set进行初始化
3.3.2 忽略lazy属性
3.3.3 HQL查询忽略fetch=join取值
三.多对一,一对一关联检索策略
order.hbm.xml
<many-to-one name="customer" class="Customer" column="CUSTOMER_ID"lazy="false"fetch="join"></many-to-one>
1.lazy属性
lazy取值为proxy和false分别代表对应的属性采用延迟检索和立即检索
2.fetch属性
fetch取值为join表示使用迫切左外连接的方式初始化n关联的1的一端的属性,并 忽略lazy属性
3.batch-size
该属性需要设置在1的一端的class元素中:
customer.hbm.xml
<class name="Customer" table="CUSTOMERS" lazy="true" batch-size="5">作用:一次初始化1的这一端代理对象的个数
- Hibernate 检索策略 (lazy,batch-size,fetch属性)
- Hibernate 检索策略 lazy fetch batch-size
- Hibernate学习之检索策略(lazy,fetch,batch-size等)
- 18. Hibernate_检索策略(lazy、fetch、batch-size等)
- 【Hibernate】Hibernate的检索策略:lazy、fetch
- Hibernate】Hibernate的检索策略:lazy、fetch
- hibernate抓取策略fetch / batch-size
- hibernate batch size & fetch
- hibernate的抓取策略(fetch和lazy)
- Hibernate 检索策略属性
- hibernate抓取策略 batch-size | hibernate.jdbc.fetch_size 和 hibernate....
- Tuning Lazy Fetching (batch size)
- 浅谈hibernate(cascade,lazy,inverse,fetch)
- 浅谈hibernate lazy fetch
- hibernate lazy和fetch
- HIbernate lazy fetch
- 关于hibernate的lazy、inverse和fetch属性的测试
- hibernate batch-size
- 装好Centos后 window下修改分区 重启后进入救援模式(rescue mode)
- vueJS学习总结
- Android 调试遇到RSA key导致手机Offline或Unauthorized问题的终极解决方法
- 图形的搜索
- [Web前端技术教学]图片与文字混排基础练习-1
- Hibernate 检索策略 (lazy,batch-size,fetch属性)
- 为什么你睡了11个小时仍然觉得疲累?
- 报名 | MTK、Linaro、诚迈科技、AlphaSTAR极客社区携手带来MediaTek X20开发板技术公开课(上海站)
- 基于vue构建的spa项目总结(一)
- 玩转QQ群营销、群排名、群演戏,打造自己的流量“鱼塘”
- MySQL主从复制原理及配置
- Android LayoutInflater深度解析 给你带来全新的认识
- Leetcode 441 Arranging Coins
- 安卓布局之ListView学习笔记