Hibernate加载策略
即时加载
使用==session.get()==获取数据,会立即查询对象,范围从一级缓存-二级缓存-数据库,我们将这种查询方式称为即时加载。
延迟加载
延迟加载也叫懒加载,比如==session.load()==获取数据,不会立即查询对象,而是在使用到该对象时,才会去查询,范围从一级缓存-二级缓存-数据库,我们将这种查询方式称为懒加载。
class的lazy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hibernate.pojo">
<!--
lazy懒加载配置,默认值true支持懒加载
false不支持懒加载,这个配置会影响get/load方法
-->
<class name="Book" lazy="true">
</class>
</hibernate-mapping>
class指的是实体类配置文件中的 class 标签上的 lazy 属性,该属性会影响 session.load() 是否以懒加载的方式获取对象。
该属性有两个值 true 和 false ,作用分别如下:
- true,默认值,支持懒加载;
- false,不支持懒加载
集合的lazy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hibernate.pojo">
<class name="Category">
<!--
lazy控制一端对应多端的数据是否懒加载
默认值true,懒加载(不查询多端数据),但是如果查询size,还是会查询所有元素
false不支持懒加载,查询一端时将多端数据也一起查询
extra懒加载(不查询多端数据),比较智能,如果查询的是size,会使用count语句
-->
<set name="books" lazy="extra">
<key column="category_id"></key>
<one-to-many class="Book"/>
</set>
</class>
</hibernate-mapping>
集合指的是实体类配置文件中的 set 、 list 、 map 标签上的 lazy 属性,该属性控制一端对应多端的数据
是否以懒加载的方式获取。
该属性有三个值 true 、 false 和 extra ,作用分别如下:
- true,默认值,懒加载(不查询多端数据),但是如果查询集合size(),还是会查询所有元素
- false,不支持懒加载,查询一端时将多端数据也一起查询
- extra,懒加载(不查询多端数据),比较智能,如果查询的是集合size(),会使用count语句
关联关系的lazy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hibernate.pojo">
<class name="Book">
<!--
lazy控制某一端关联的另一端的数据是否懒加载
默认值proxy,懒加载(不查询关联的另一端)
false不支持懒加载,查询某一端时将关联的另一端一起查询
-->
<many-to-one lazy="proxy" name="category" class="Category" column="category_id"cascade="save-update"></many-to-one>
</class>
</hibernate-mapping>
关联关系指的是实体类配置文件中的 many-to-one 、one-to-many、many-to-many标签上的 lazy 属性,该属性控制某一端关联的另一端的数据是否以懒加载的方式获取。
该属性主要用到 proxy 和 false ,作用分别如下:
- proxy,默认值,懒加载(不查询关联的另一端)
- false,不支持懒加载,查询某一端时将关联的另一端一起查询