Hibernate读书笔记-----懒加载分析(二)

2014-11-24 08:39:20 · 作者: · 浏览: 1
,默认值为select。即在设为join时,他会直接将从表信息以join方式查询到而不是再次使用select查询,这样导致了懒加载的失效。

2.2、one-to-many懒加载
与one-to-one关联不同,对one-to-many而言,主表的每一条属性都会对应从表的多条数据,这个时候懒加载就显得非常有效了。比如一个部门里面有多个员工,如果没有懒加载,每查询这个部门的时候都会查询出多个员工,这会大大增加与数据库交互的成本。所以Hbernate默认的是加入懒加载的。这就是查询集合属性的时候返回的是一个PersistentIndexed*类型对象的原因。该对象其实就是一个代理对象。当然,可以在映射文件中通过将lazy属性设为假来禁用。
Hibernate默认对one-to-many就是使用的懒加载,但用户也可以取消懒加载操作:
一:设置lazy=”false”;
二:设置fetch=”join”.
实现此种懒加载必须在从对象这边同时满足两个个条件:
1、lazy!=false(lazy的属性有三个选项分别为:no-proxy、false和proxy)
2、fetch=select。

2.3、mang-to-one懒加载
此关联关系的懒加载和one-to-one的懒加载一样都是可要可不要的,因为对执行效率的提高都不是非常明显。虽然多对一与一对一关系方式相同,但是在Hibernate中多对一时,默认是进行懒加载的。另外有一点需要注意的是懒加载并不会区分集合属性里面是否有值,即使是没有值,他依然会使用懒加载。
实现此种懒加载必须在从对象这边同时满足两个个条件:
1、lazy!=false(lazy的属性有三个选项分别为:no-proxy、false和proxy)
2、fetch=select

2.4、many-to-many懒加载
此关联关系的懒加载和one-to-many的懒加载一样对程序的执行效率的提高都是非常明显的。
实现此种懒加载必须在从对象这边同时满足两个个条件:
1、lazy!=false(lazy的属性有三个选项分别为:no-proxy、false和proxy)
2、fetch=select
能够懒加载的对象都是被改过的代理对象,当相应的对象没有关闭时,访问这些懒加载对象的属性(getId和getClass除外)hibernate会初始化这些代理,或用hibernate.initalize(proxy)来初始化代理对象;当关闭session后在访问懒加载的对象就会出现异常


作者:chenssy