Hibernate 检索策略属性

一.在里面设置lazy属性,

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

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

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

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

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

2. 元素有一个 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.在里面使用lazy属性,lazy 取值为 proxy 和 false 分别代表对应对应的

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

2.在里面使用fetch属性,只能去select和join值

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

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

3.使用batch-size时,该属性需要设置在 1 那一端的 class 元素中: 

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


你可能感兴趣的:(Hibernate)