Hibernate-04 延迟加载
2024-09-30 11:32:41
学习任务
- 延迟加载
- Open Session In View模式
延迟加载
延迟加载(lazy load懒加载)是在真正需要数据时才执行SQL语句进行查询,避免了无谓的性能开销。
延迟加载策略的设置分为:类级别的查询策略、一对多和多对多关联的查询策略、多对一关联的查询策略。
Hibernate3.X以上的版本,默认都是采用延迟加载策略。
用于设定延迟加载特性的lazy属性如下表所示:
级别 | lazy属性取值 |
类级别 | <class>元素中lazy属性的可选值为true(延迟加载)和false(立即加载)。默认值为true。 |
一对多关联级别 | <set>元素中lazy属性的可选值为true(延迟加载)、extra(增强延迟加载)和fasle(立即加载)。默认值为true。 |
多对一关联级别 | <many-to-one>元素中的lazy属性的可选值为proxy(延迟加载)、no-proxy(无代理延迟加载)和false(立即加载)。默认为proxy。 |
类级别查询策略
类级别可选策略有:立即加载和延迟加载。默认为延迟加载。
一、立即加载
1.Dept.hbm.xml文件
<class name="com.etc.entity.Dept" table="`DEPT`" schema="scott"
dynamic-update="true" lazy="false">
2.DAO代码
return (Dept) this.getSession().load(Dept.class, id);
3.BIZ测试方法
@Test
public void load() {
Transaction tx=null;
try{
tx=deptDao.getSession().beginTransaction();
Dept dept=deptDao.load(new Short("10"));
tx.commit();
System.out.println(dept.getDeptName());//事务关闭,确认dept属性已全部加载,并输出部门名称
}catch (Exception e) {
e.printStackTrace();
if(tx!=null){
tx.rollback();
}
}
}
4.测试结果
Hibernate:
select
dept0_."DEPTNO" as DEPTNO1_0_0_,
dept0_."DNAME" as DNAME2_0_0_,
dept0_."LOC" as LOC3_0_0_
from
scott."DEPT" dept0_
where
dept0_."DEPTNO"=?
备注:load()方法默认加载OID,不加载实体属性。假如修改class的lazy属性值为true,若要在session关闭后输出实体属性(例外:访问OID不会引发数据库查询,不会报错),将会报如下错误:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
此外,无论类级别设置是否为延迟加载,get()和list()方法都是立即加载。
二、延迟加载
1.映射文件延迟加载设置
<class name="com.etc.entity.Dept" table="`DEPT`" schema="scott"
dynamic-update="true" lazy="true">
或者:
<class name="com.etc.entity.Dept" table="`DEPT`" schema="scott"
dynamic-update="true">
//待续
一对多和多对多关联查询策略
多对一关联查询策略
Open Session In View
最新文章
- Google C++单元测试框架GoogleTest---AdvancedGuide(译文)下
- 【JavaScript】获取未知类的结构
- 未能正确加载包“Microsoft.Data.Entity.Design.Package.MicrosoftDataEntityDesignPackage
- 【洛谷 P3385】模板-负环(图论--spfa)
- fdtd simulation, plotting with gnuplot, writting in perl
- 省常中模拟 Test2 Day2
- leetcode解题—Longest Palindromic Substring
- Clob对象转为字符串
- 十天学Linux内核之第二天---进程
- UNION ALL合表查询
- javascript深入浅出图解作用域链和闭包
- git方法 GUI here
- D3比例尺
- Power BI 3-4月功能更新培训合集
- Newtonsoft.Json序列化字符串-格式化
- Ubuntu安装守护进程supervisor
- layui 富文本 图片上传 后端PHP接口
- 基于VUE,VUX组件开发的网易新闻页面搭建过程
- 2018.4.3 配置AD服务器步骤
- Selenium-Switch与SelectApi接口详解