一.在<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 的这一段代理对象的个数.