电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

hibernate如何实现延迟加载

hibernate如何实现延迟加载_第1页
1/9
hibernate如何实现延迟加载_第2页
2/9
hibernate如何实现延迟加载_第3页
3/9
hibernate 如何实现延迟加载 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate 中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3 中还提供了对属性的延迟加载。下面我们就分别介绍这些种类的延迟加载的细节。 A、实体对象的延迟加载: 如果想对实体对象使用延迟加载,必须要在实体的映射配置文件中进行相应的配置,如下所示: … … 通过将 class 的lazy 属性设置为true,来开启实体的延迟加载特性。如果我们运行下面的代码: User user=(User)session.load(User.class,”1”);(1) System.out.println(user.getName());(2) 当运行到(1)处时,Hibernate 并没有发起对数据的查询,如果我们此时通过一些调试工具(比如JBu ilder2005 的Debu g 工具),观察此时u ser 对象的内存快照,我们会惊奇的发现,此时返回的可能是User$EnhancerBy CGLIB$$bede8986 类型的对象,而且其属性为nu ll,这是怎么回事?还记得前面我曾讲过session.load()方法,会返回实体对象的代理类对象,这里所返回的对象类型就是User 对象的代理类对象。在 Hibernate 中通过使用 CGLIB,来实现动态构造一个目标对象的代理类对象,并且在代理类对象中包含目标对象的所有属性和方法,而且所有属性均被赋值为nu ll。通过调试器显示的内存快照,我们可以看出此时真正的User 对象,是包含在代理对象的CGLIB$CALBACK_0.target 属性中,当代码运行到(2)处时,此时调用 u ser.getName()方法,这时通过CGLIB赋予的回调机制,实际上调用CGLIB$CALBACK_0.getName()方法,当 调用 该 方法时,Hibernate会首 先 检 查CGLIB$CALBACK_0.target 属性是否为nu ll,如果不为空,则调用目标对象的getName 方法,如果为空,则会发起数据库查询,生成类似这样的SQL 语句:select * from user where id=’1’;来查询数据,并构造目标对象,并且将它赋值到 CGLIB$CALBACK_0.target 属性中。 这样,通过一个中间代理对象,Hibernate 实现了实体的延迟加载,只有当用户真正发起获得实体对象属性的动作时,才真正会发起数据库查询操作。所以实体的延迟加载是用通过中间代理类完成的,所以只有session.load(...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

hibernate如何实现延迟加载

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部