原文来源:http://blog.csdn.net/zhang6622056/article/details/7694176
http://superleo.iteye.com/blog/243322/
在关系模型的对应关系中一对一、一对多、和多对多。都已经做了相关案例Hibernate在提供这些查询的时候它有一种懒加载的机制。比如: 之前我们举例的一对一的案例Person-Idcard。如果我们只查询person那么会不会查询Idcard呢?
public class Person { private int id; private String name; private IdCard idcard; }
毕竟Idcard也是Person类的一个属性。如上面的代码:
如果我们查询一个person我们只是用到了这个person的name属性。而用不到它关联的idcard部分。那么我们就可以在配置文件中设置lazy=”true”的一个选项。如下面的代码:
<hibernate-mapping package="cn.hibernate.model"> <class name="Person" table="person"> <id name="id"> <generator class="native" /> </id> <property name="name" column="name"/> <!-- 一对一的对象关系描述 --> <one-to-one name="idcard" lazy="false"/> </class> </hibernate-mapping>
当懒加载开启的时候那么我们查询person对象不会去查询相应的Idcard。只有在我们用person对象的get方法调用idcard对象的时候才会执行查询。这样就提高了效率。
举例sql说明:
下面的这些代码只是查询Emp员工对象。
s = HibernateUtil.getSession(); Employee emp = (Employee) s.get(Employee.class, 2);
懒加载开启:
只输出一句sql:
select employee0_.id as id2_0_, employee0_.empname as empname2_0_, employee0_.dept_id as dept3_2_0_ from employee employee0_ where employee0_.id=?
懒加载未开启:
输出两句查询sql:
Hibernate: select employee0_.id as id2_0_, employee0_.empname as empname2_0_, employee0_.dept_id as dept3_2_0_ from employee employee0_ where employee0_.id=? Hibernate: select dept0_.id as id1_0_, dept0_.deptname as deptname1_0_ from dept dept0_ where dept0_.id=?
注意: 懒 加载的对象是代理对象,getId是不用访问数据库的。另外getClass得到的也是一个代理对象。只有get其他属性的时候才会访问数据库。 Session的load方法可以懒加载。然后用Hibernate.initialize(proxyObj)load方法实例化该代理对象。 懒加载通过asm和cglib包实现。
相关推荐
hibernate懒加载策略.dochibernate懒加载策略.doc
Hibernate延迟加载机制.zip
深入理解hibernate懒加载技术,正确使用懒加载
hibernate抓取策略和懒加载案例,供大家下载查看。大家都知道,hibernate都设计到一个优化问题。
主要介绍了浅谈解决Hibernate懒加载的4种方式,具有一定借鉴价值,需要的朋友可以参考下。
解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session...
去除预加载的Viewpager,加载第一页时不会默认加载第二页,
Hibernate延迟加载以及利用Spring 大家看看 参考一下
详细介绍hibernate延迟加载,对hibernate初学者有一定的帮助
Hibernate延时加载与lazy机制.docHibernate延时加载与lazy机制.doc
hibernate延迟加载解决 延迟加载的具体解决方法
hibernate事务管理机制.dochibernate事务管理机制.doc
Hibernate 简介 Hibernate 开发流程 Hibernate 配置文件 Hibernate 核心接口和类 Hibernate ORM映射 HQL Hibernate 懒加载机制与抓取策略 Hibernate 缓存 Hibernate 锁机制
hibernate缓存机制 hibernate缓存机制 hibernate缓存机制
hibernate和java类型转换,hibernate和java类型转换
首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,最后可以举个具体的例子。 Hibernate缓存的作用: Hibernate是一个持久层框架
了解Hibernate的一个很好的文档,想学Hibernate的朋友可以载来看看。
Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载。Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能。