好久没有认真写过博客了,今天就好好的写一篇吧!!!!!!!!!当Hibernate 从数据库中加载某个对象(例如:Dept对象)时,如果同时自动加载所有的关联的某个对象(例如:Emp对象),而程序实际上仅仅需要访问Dept对象,那么这些关联的Emp对象就白白浪费了许多内存空间。发 ...
好久没有认真写过博客了,今天就好好的写一篇吧!!!!!!!!!
当Hibernate 从数据库中加载某个对象(例如:Dept对象)时,如果同时自动加载所有的关联的某个对象(例如:Emp对象),而程序实际上仅仅需要访问Dept对象,那么这些关联的Emp对象就白白浪费了许多内存空间。发生这种情况的原因是:就是立即加载的问题。
1.什么是立即加载呢?
Hibernate 查询 Dept 对象时,立即加载并加载与之关联的Emp对象,这种查询策略称为 立即加载。
立即加载存在两大不足:
1.select 语句的数目太多,需要频繁地访问数据库,会影响查询性能。
2.在应用程序只需要访问Dept对象时,而不需要访问Emp对象的场合,加载Emp对象完全是多余的操作,这些多余的Emp对象就白白的浪费了许多内存空间。
那么我们必须要解决这个问题,所以就要谈到了“延迟加载”的知识了,延迟加载策略能避免加载应用程序不需要访问的关联对象,以优化查询性能。
不过我们要知道有多种查询策略,接下来我们就一起来分析每一种查询策略的加载问题。
第一种:类级别的查询策略
类级别可选的加载策略包括立即加载和延迟加载,默认是延迟加载,如果,<class>元素的lazy的属性为true,表示采用延迟加载;如果lazy 属性 为 false,表示采用立即加载。
我们现在以代码来解释是最好的办法。
1.立即加载策略
我们在Dept.hbm.文件中 加 lazy=“false” 属性,即可。
表结构:
测试代码:
Session session = HibernateUtil.currentSession(); session.beginTransaction(); Dept dept = (Dept)session.load(Dept.class, 1); System.out.println("部门名称"+dept.getdName()); System.out.println("==================="); Dept dept2 = (Dept)session.load(Dept.class, 1); System.out.println("部门名称"+dept2.getdName()); session.getTransaction().commit(); HibernateUtil.closeSessio();
原标题:Hibernnate延迟加载策略(这么详细你还看不懂)
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。