Java

Hibernate学习笔记 | Hibernate检索策略

2019-08-13  本文已影响0人  一颗白菜_

类级别的检索策略

类级别可选的检索策略包括立即检索和延迟检索,默认为延迟检索

类级别的检索策略可以通过<class>元素的lazy属性进行设置

如果程序加载一个对象的目的是为了访问它的属性,可以采取立即检索。如果程序加载一个持久化对象的目的是仅仅为了获得它的引用,可以采取延迟检索,在使用延迟检索时,要防止懒加载异常。

无论<class>的元素的lazy属性是true还是false,Session的get()及Query的list()在类级别总是使用立即检索策略。

<class>元素的lazy属性为true或取默认值,Session的load()不会执行查询数据表的SELECT语句,仅返回代理类对象的实例,该代理类实例有如下特征:

延迟检索和增强延迟检索

在延迟检索(lazy属性为true)集合属性时,Hibernate在以下情况下初始化集合代理类实例

增强延迟检索(lazy属性为extra)时,与延迟检索类似,主要区别是增强延迟检索策略能进一步延迟实体类对象的集合代理实例的初始化时机

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

在映射文件中,用<set>元素来配置一对多关联及多对多关联关系,<set>元素有lazyfetch属性。

<!-- 一次性检索5个集合-->
<set name="orders" table="orders" inverse="true" cascade="delete" batch-size="5">
       <key column="customer_id"></key>
       <one-to-many class="Order"/>
</set>

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

set一样,<many-to-one>元素也有一个lazy属性和fetch属性

lazy属性(默认值为proxy) fetch属性(默认值为select) 检索实体对象时对关联的实体对象使用的检索策略
proxy 未显式设置(默认值为select) 采取延迟检索
no-proxy 未显式设置(默认值为select) 无代理延迟检索
false 未显式设置(默认值为select) 立即检索
未显式设置(默认值为proxy) join 迫切左外连接策略

关联级别运行时的检索策略

上一篇 下一篇

猜你喜欢

热点阅读