Hibernate 延迟加载
一、什么是延迟加载? 延迟加载是指当应用程序想要从数据库获取对象时(在没有设置lazy属性值为false),Hibernate只是从数据库获取符合条件的对象的OId从而生成代理对象,并没有加载出对象访问该对象的属性时才会加载出相应的值。简答来说就是尽可能的减少查询的数据量。简言之,是当在真正需要数据时,才执行Sql语句进行查询。 二、如何配置延迟加载 在Hibernate中通过.hbm配置文件中的lazy属性来配置,并且lazy属性出现的位置不同其作用和取值也不同。下面来详细介绍其在不同位置的不同取值和作用。 延迟加载分类: 01.类级别的查询策略 02.一对多和多对多关联的查询策略 03.多对一关联的查询策略 ①类级别的查询策略 类级别可选的加载策略包括立即加载和延迟加载。默认为延迟加载。如果元素的lazy属性为true。表示采用延迟加载;如果lazy属性为false,表示采用立即加载 以Emp和Dept为例: 在Dept.hbm.xml中的元素中添加属性 lazy="false" 表示立即加载 测试类: @Test public void oneTest(){ Dept dept=(Dept)session.load(Dept.class, 1); //lazy true/false 类级别 System.out.println(dept.getDeptName()); load()方法在Id属性和getClass(),不去请求数据库,其他属性需请求数据库 ② 一对多和多对多关联的查询策略 lazy属性的另一个属性extra 加强延迟加载 表明采用增强延迟加载策略:在元素配置lazy属性为"extra"。增强延迟加载策略与一般的延迟加载策略(lazy="true")相似。 区别:这个策略能在进一步的帮我延迟加载这个对象,也就是代理对象的初始化时机。 关键代码如下: 复制代码 @Test public void loadDept() { // 获取Session对象 Session session = HibernateUtil.currentSession(); // 如果通过load方式加载Dept对象 Dept dept=(Dept)session.load(Dept.class, 12); //拿该部门下的员工的人数:也就是集合的大小 dept.getEmps().size(); // 关闭session HibernateUtil.closeSession(); } 复制代码 输出结果如下: ③ 多对一关联的查询策略 元素用来设置多对一关联关系。 lazy属性 默认值为proxy proxy:延迟加载 no-proxy:无代理延迟加载 false:立即加载 例子: 复制代码 /* * 多对一延迟加载 */ @Test public void manytoTest(){ Emp emp=(Emp)session.get(Emp.class, 2); //获取Dept对象,因为此时的配置文件lazy是proxy,所以是代理对象 Dept dept=emp.getDept(); System.out.println(dept.getDeptName()); } 复制代码 输出结果: 无代理延迟对象: 在元素中配置lazy属性为no-proxy,表示无代理延迟加载。 复制代码 @Test public void loadEmp() { // 获取Session对象 Session session = HibernateUtil.currentSession(); // 如果通过load方式加载Dept对象 Emp emp=(Emp)session.get(Emp.class, 1); //获取Dept对象,因为此时的配置文件lazy是proxy,所以是代理对象 Dept dept=emp.getDept(); // 关闭session HibernateUtil.closeSession(); } 复制代码 此程序在加载的Emp对象dept属性为null,当程序运行到第3行的时候将触发Hibernate执行查询Dept表的select语句,从而加载Dept对象,由此可见,当lazy属性为proxy时,可以延长延迟加载Dept代理对象的时间,而lazy属性为no-proxy时,则可以避免使用由Hibernate提供的Dept代理类实例,是Hibernate对程序提供更加透明的持久化服务。
Hibernate 延迟加载的更多相关文章
- [转]Hibernate延迟加载与opensessioninviewFilter
原文地址:http://blog.csdn.net/a19881029/article/details/7916702 hibernate延迟加载: 一个person对应多个school,使用hibe ...
- Hibernate延迟加载Lazy
Hibernate延迟加载Lazy 延迟加载(lazy load)又称为懒加载,延迟加载的机制是为了避免一些无谓性能的开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作 如 ...
- Hibernate学习--hibernate延迟加载原理(动态代理)
在正式说hibernate延迟加载时,先说说一个比较奇怪的现象吧:hibernate中,在many-to-one时,如果我们设置了延迟加载,会发现我们在eclipse的调试框中查看one对应对象时,它 ...
- 【转】hibernate 延迟加载
Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载.hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hiberna ...
- hibernate 延迟加载深入分析(persistentSet的延迟加载)
Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载.Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hiberna ...
- Hibernate 延迟加载 分析
出处:http://www.ibm.com/developerworks/cn/java/j-lo-hibernatelazy/#icomments Hibernate 的延迟加载(lazy load ...
- Hibernate学习--hibernate延迟加载原理-动态代理(阿里电面)
在正式说hibernate延迟加载时,先说说一个比较奇怪的现象吧:hibernate中,在many-to-one时,如果我们设置了延迟加载,会发现我们在eclipse的调试框中查看one对应对象时,它 ...
- Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式
Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式 主题 概念 Hibernate 延迟加载的代理模式 Spring AOP的代理模式 区别和联系 静态代理和动态代理 概念 代 ...
- SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】
配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter ...
- Hibernate延迟加载与opensessioninviewFilter
转自:https://blog.csdn.net/skk_7/article/details/17917339 hibernate延迟加载: 一个person对应多个school,使用hibernat ...
随机推荐
- lists删除
List<Map<String, Object>> trackList = bizFollowRepo.findList("trackFindPageList&quo ...
- Greedy:Cow Acrobats(POJ 3045)
牛杂技团 题目大意:一群牛想逃跑,他们想通过搭牛梯来通过,现在定义risk(注意可是负的)为当前牛上面的牛的总重量-当前牛的strength,问应该怎么排列才能使risk最小? 说实话这道题我一开始给 ...
- 带中文的路径导致NSURL初始化一直为null的问题
一.问题描述 在学习Ojective-C过程中,需要读取文件中的内容,但发现指针变量url的值一直为nil. 代码如下: NSString *strUrl=@"file:///Users/f ...
- hdu 1896.Stones 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896 题目意思:给出 n 块石头的初始位置和能到达的距离.对于第奇数次遇到的石头才抛掷,偶数次的就忽略 ...
- xcode运行push通知总是提示输入用户名和密码
xcode运行push通知总是提示输入用户名和密码,目前找到的解决方案是, 打开钥匙串,然后找到push证书下面的私有密钥,双击进入将访问控制设置为允许全部访问,即可.
- IOS - NSURLSession
NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.注意, ...
- web前端开发:css3实现loading
web前端开发:css3实现loading 有大量web前端开发工具及学习资料,可以搜群[ web前端学习部落22群 ]进行下载,遇到学习问题也可以问群内专家以及课程老师哟 <!DOCTYPE ...
- A Horrible Poem(bzoj 2795)
Description 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. Input 第一行一个正整 ...
- Java使用正则表达式解析LRC歌词文件
LRC歌词是一种应用广泛的歌词文件,各主流播放器都支持. lrc歌词文本中含有两类标签: 1.标识标签(ID-tags) [ar:艺人名] [ti:曲名] [al:专辑名] [by:编者(指编辑LRC ...
- NYOJ题目816它合法吗?
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtIAAAJ0CAIAAACwTVMOAAAgAElEQVR4nO3du1LjzNo24O8kyDkQYh