下载此文档

hibernate如何实现延迟加载.doc


文档分类:IT计算机 | 页数:约10页 举报非法文档有奖
1/10
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/10 下载此文档
文档列表 文档介绍
hibernate 如何实现延迟加载
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。下面我们就分别介绍这些种类的延迟加载的细节。  
 
A、实体对象的延迟加载:  
 
如果想对实体对象使用延迟加载,必须要在实体的映射配置文件中进行相应的配置,如下所示:  
 
<hibernate-mapping>  
 
<class name=”” table=”user” lazy=”true”>  
 
    ……  
 
</class>  
 
</hibernate-mapping>  
 
通过将class的lazy属性设置为true,来开启实体的延迟加载特性。如果我们运行下面的代码:  
 
User user=(User)(,”1”);(1)  
 
(());(2)  
 
当运行到(1)处时,Hibernate并没有发起对数据的查询,如果我们此时通过一些调试工具(比如JBuilder2005的Debug工具),观察此时user对象的内存快照,我们会惊奇的发现,此时返回的可能是User$EnhancerByCGLIB$$bede8986类型的对象,而且其属性为null,这是怎么回事?()方法,会返回实体对象的代理类对象,这里所返回的对象类型就是User对象的代理类对象。在Hibernate中通过使用CGLIB,来实现动态构造一个目标对象的代理类对象,并且在代理类对象中包含目标对象的所有属性和方法,而且所有属性均被赋值为null。通过调试器显示的内存快照,我们可以看出此时真正的User对象,是包含在代理对象的CGLIB$,当代码运行到(2)处时,()方法,这时通过CGLIB赋予的回调机制,实际上调用CGLIB$()方法,当调用该方法时,Hibernate会首先检查CGLIB$,如果不为空,则调用目标对象的getName方法,如果为空,则会发起数据库查询,生成类似这样的SQL语句:select * from user where id=’1’;来查询数据,并构造目标对象,并且将它赋值到CGLIB$。  
 
    这样,通过一个中间代理对象,Hibernate实现了实体的延迟加载,只有当用户真正发起获得实体对象属性的动作时,才真正会发起数据库查询操作。所以实体的延迟加载是用通过中间代理类完成的,()方法才会利用实体延迟加载,()方法才会返回实体类的代理类对象。  
 
B、        集合类型的延迟加载:  

hibernate如何实现延迟加载 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数10
  • 收藏数0 收藏
  • 顶次数0
  • 上传人n22x33
  • 文件大小0 KB
  • 时间2015-10-14