11.Hibernate的懒加载
原创
©著作权归作者所有:来自51CTO博客作者magicsa的原创作品,请联系作者获取转载授权,否则将追究法律责任
使用Load进行加载时,Hibernate会创建一个代理类,从原始类中继承,且此时Hibernate不会去访问数据库,而在第二次使用时才会去访问数据库.
因此可以立即初始化用户:
User user1= (User) session.load(UserClass,id);
Hibernate.initialize(user1);
System.out.println(user1.getClass);
原因:由于对数据库交互的过程耗费资源较多,
因此,使用懒加载时,Hibernate会延迟到用户真正需要这个值时,才会去访问,以便减少与数据库交互的次数,这样如果使用:if(user1 != null ) 则不会成立.因为这个user1是Hibernate临时创建的实例化对象.
而访问该user1,即Hibernate的代理对象,必须是在session关闭之前,才能正常访问.
懒加载:
通过asm和cglib两个包实现;domain是非final修饰的.
1.session.load实现懒加载
2.one-to-one(元素)懒加载
必须同时满足3个条件:主表不能有constrained=true,lazy!=false;fetch=select
3.one-to-many(元素)懒加载: lazy!=false;fetch=select
4.many-to-one:lazy!=false;fetch=select
5.many-to-many: lazy!=false;fetch=select
6.能够懒加载的对象都是被改写过的代理对象,当关联的session没有关闭时,访问懒加载对象(即代理对象)的属性,getId和getClass除外,Hibernate会立即初始化这些代理,或者使用Hibernate.initialize(proxy)来初始化代理对象,当关联的session关闭之后,再访问懒加载则会出现异常.
lazy= 什么时候捉取
fetch= 捉取方式:select=关联查询;join=连接表的方式查询(效率高)
fetch=join时,lazy的设置将没有意义.
上一篇:10.继承映射多表设计
下一篇:12.缓存
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Hibernate懒加载策略
Hibernate懒加载策略 概念Lazy的概念就是只有在真正使用对象时,才会去创建。对hibernate而\
加载 延迟加载 hibernate -
Hibernate学习之懒加载
懒加载:懒加载(Load On Demand)是一种独特而又强大的数据获取方法 ,是指程序推
懒加载 java hibernate 数据库 -
Hibernate懒加载/延迟加载机制总结
lazy:懒加载/延迟加载 &nbs
Lazy Hibernate 延迟加载