Hibernate延迟加载实现原理

转载 2015年07月08日 16:07:10
通过将class的lazy属性设置为true,来开启实体的延迟加载特性。
如果我们运行下面的代码:
User user=(User)session.load(User.class,"1");(1)   
System.out.println(user.getName());                 (2) 
当运行到(1)处时,Hibernate并没有发起对数据的查询,如果我们此时通过一些调试工具(比如Eclipse的Debug工具),观察此时user对象的内存快照,我们会惊奇的发现,此时返回的可能是User$EnhancerByCGLIB$$bede8986类型的对象,而且其属性为null,这是怎么回事?session.load()方法会返回实体对象的代理类对象,这里所返回的对象类型就是User对象的代理类对象。在Hibernate中通过使用CGLIB,来实现动态构造一个目标对象的代理类对象,并且在代理类对象中包含目标对象的所有属性和方法,而且所有属性均被赋值为null。通过调试器显示的内存快照,我们可以看出此时真正的User对象,是包含在代理对象的CGLIB$CALBACK_0.target属性中,当代码运行到(2)处时,此时调用user.getName()方法,这时通过CGLIB赋予的回调机制,实际上调用CGLIB$CALBACK_0.getName()方法,当调用该方法时,Hibernate会首先检查CGLIB$CALBACK_0.target属性是否为null,如果不为空,则调用目标对象的getName方法,如果为空,则会发起数据库查询,生成类似这样的SQL语句:select * from user where id=’1’;来查询数据,并构造目标对象,并且将它赋值到CGLIB$CALBACK_0.target属性中。 这样,通过一个中间代理对象,Hibernate实现了实体的延迟加载,只有当用户真正发起获得实体对象属性的动作时,才真正会发起数据库查询操作。所以实体的延迟加载是用通过中间代理类完成的,所以只有session.load()方法才会利用实体延迟加载,因为只有session.load()方法才会返回实体类的代理类对象。

Hibernate延迟加载实现原理

通过将class的lazy属性设置为true,来开启实体的延迟加载特性。 如果我们运行下面的代码: User user=(User)session.load(User.class,"1");(1)...
  • kubaoer
  • kubaoer
  • 2011年11月17日 21:46
  • 4271

Hibernate延迟加载机制原理

一.什么是懒加载?他的作用? 延迟加载,也叫懒加载,它是Hibernate为提高程序执行效率而提供的一种机制,即只有真正使用该对象的数据时才会创建。 Hibernate中主要是通过...

hibernate延迟加载机制——get和load原理

在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就是通过session.load()方法,然后其实这两种方法在获得一个实体对...

hibernate的延迟加载的原理

hibernate的延迟加载,就是在关联映射的时候,对于被关联的对象或集合,不当时查询数据库,而是该集合或用户被用到的时候才去查。 原理就是使用动态代理的方式,把持久化类替换成代理类(对于单个对象和...
  • gm_163
  • gm_163
  • 2014年04月29日 14:29
  • 456

hibernate annotation方式实现属性级延迟加载

1.在POJO文件需要延迟加载的属性上加“ @Basic(fetch = FetchType.LAZY) ” 2、借助类增强器对二进制Class文件进行强化处理(buildtime byteco...

浅析Hibernate实现实体对象延迟加载

学习Hibernate时,经常会遇到实体对象延迟加载问题,这里将介绍问题的解决方法Hibernate实现实体对象延迟加载。 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在...

hibernate 延迟加载底层实现机制

Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载。Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hiberna...
  • dlg07
  • dlg07
  • 2013年10月26日 19:57
  • 490

hibernate延迟加载解决

  • 2013年08月19日 23:33
  • 32KB
  • 下载

Hibernate延迟加载

  • 2013年03月19日 22:16
  • 15KB
  • 下载

前端性能优化之 —— 图片延迟加载 (原理以及实现方式)

前端开发的时候,有些列表页面可能会有很多图片需要加载。一次加载太多图片,会占用很大的带宽,影响网页的加载速度。 这时候我们想到一种方式,让用户浏览到什么地方,就加载该处的图片。 这里写了一个简单的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate延迟加载实现原理
举报原因:
原因补充:

(最多只允许输入30个字)