`
ant_bug
  • 浏览: 5349 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

lazy加载问题

    博客分类:
  • JAVA
阅读更多
一个parent/child模型中,clientt端定义了many-to-one,在parent端设置one-to-many,双方都设置了lazy加载。
通过HibernateTemplate.get方法得到实体,那么实体中的延迟加载部分是一个proxy。
问题如下
  1. 在get方法后,session已关闭,通过什么方式不使org.hibernate.LazyInitializationException到处蔓延;
  2. 如果不希望proxy对象延伸到表现层和service层,那么要如何处理;
  3. 如果在表现层和service层访问client.getParent(),要返回一个parent对象,其中只有代理主键有赋值,那么要怎么处理;
  4. 如果在表现层和service层访问parent.getChildren(),要得到一个size为0的List(不是proxy)要怎么处理。
我目前的做法是:
java 代码
 
  1. Client client = (Client)get(Client.class, id);      
  2. if (client == nullreturn null;      
  3.       
  4. if (client.getParent() != null)      
  5.    client.setParent(new Parent(client.getParent().getId()));      
  6.       
  7. return client;     
  8.     
  9.     
  10. Parent parent = (Parent)get(Parent.class, id);    
  11. if (parent == nullreturn null;    
  12.     
  13. parent.setChildren(new ArrayList<Child>());    
  14. return parent;    
这种做法并不是很优雅,如果是用find()方法,还需要对结果集进行遍历设置,非常麻烦。
请高手赐教!
分享到:
评论
9 楼 ant_bug 2007-05-11  
kof99th 写道
如果不用open session in view的话,你需要在你的service上配interceptor,自己做session的打开和关闭操作来模拟open session in view,这样就不用考虑LazyInitializationException了,如果数据还需要在表现层使用,可以使用原始的hibernate.initialize

这么做的话,表现层就和dao层(Hibernate)有了耦合,虽然大部分项目不会轻易更换dao的实现,但这种实现方法并不是很好,而且要求dao的接口甚至service的接口必须做出明确的说明。
8 楼 kof99th 2007-05-11  
如果不用open session in view的话,你需要在你的service上配interceptor,自己做session的打开和关闭操作来模拟open session in view,这样就不用考虑LazyInitializationException了,如果数据还需要在表现层使用,可以使用原始的hibernate.initialize
7 楼 ant_bug 2007-05-11  
Qieqie 写道
真不想回答这个帖子呀
如果你在入门板块发表,我回答的兴趣就大了

如果你是在这装牛人的话,那就太没品味了!
6 楼 Qieqie 2007-05-11  
真不想回答这个帖子呀
如果你在入门板块发表,我回答的兴趣就大了
5 楼 ant_bug 2007-05-11  
我的问题关键是如何防止LazyInitializationExceptionproxy到处蔓延,使用Session In View模式是一种解决方案,是否还存在其它方案?
4 楼 ant_bug 2007-05-11  
Qieqie 写道
呵呵。 不是BUG,也需要改!

怎么改,有没有解决方案。
3 楼 Qieqie 2007-05-11  
呵呵。 不是BUG,也需要改!
2 楼 ant_bug 2007-05-11  
Qieqie 写道
1、看看你的这行代码,是个BUG:

if (client.getParent() != null)       
   client.setParent(new Parent(client.getParent().getId()));       

parent.setChildren(new ArrayList());  也类似

2、不是很清楚你问的问题,但可能你需要用SessionInView模式

3、看Hibernate Reference非常关键!


这段代码并没有错client.getParent()返回的是一个proxy,这个proxy可以得到代理主键。上述代码的意图是用proxy中的代理主键构建一个Parent对象,那么在service层或表现层访问时,就不会遇到LazyInitializationException。

引用
2、不是很清楚你问的问题,但可能你需要用SessionInView模式
如果仅仅只是做DAO的单元测试,那么要SessionInView模式要怎么用,如果不web应用程序,又该怎么处理。
1 楼 Qieqie 2007-05-11  
1、看看你的这行代码,是个BUG:

if (client.getParent() != null)       
   client.setParent(new Parent(client.getParent().getId()));       

parent.setChildren(new ArrayList());  也类似

2、不是很清楚你问的问题,但可能你需要用SessionInView模式

3、看Hibernate Reference非常关键!

相关推荐

    jquery.lazyload图片预加载效果 jquery预加载

    为了解决这一问题,开发者们引入了图片预加载技术,其中jQuery LazyLoad是广泛应用的一种解决方案。 jQuery LazyLoad 是一个jQuery插件,它的主要功能是在用户滚动页面到图片所在位置时才开始加载图片,而不是在...

    懒加载lazyload

    懒加载(Lazy Load)是一种网页优化技术,主要应用于图片、视频等大容量媒体资源的加载。它的核心思想是延迟加载,即在用户滚动页面时,只加载可视区域内的元素,而不是一次性加载整个页面的所有资源。这极大地提高...

    图片延迟加载 lazyload

    图片延迟加载(Lazy Load)是一种优化网页性能的技术,主要用于处理大量图片或多媒体资源的加载。在网页设计中,当用户滚动页面时,只有进入视口的图片才会开始加载,而那些还未显示出来的图片则会暂时保持占位符...

    lazyload延迟加载

    Lazyload是通过延迟加载来实现按需加载,达到节省资源,加快浏览速度的目的。 网上也有不少类似的效果,这个Lazyload主要特点是: 支持使用window(窗口)或元素作为容器对象; 对静态(位置大小不变)元素做了大量...

    懒加载案例lazyload

    懒加载(Lazy Load)是一种优化网页性能的技术,它主要用于图片、视频或JavaScript等资源的加载。在网页初次加载时,并不立即加载所有内容,而是只加载用户可视区域内的元素,当用户滚动页面到某一位置或者触发特定...

    lazyload异步加载图片

    **懒加载(Lazy Load)异步加载图片技术详解** 懒加载是一种优化网页性能的技术,它主要应用于图片或者视频等大体积资源的加载。在网页初次加载时,只加载视口内的图片,当用户滚动页面,即将进入视口的图片才会被...

    JQuery LazyLoad 图片懒加载实例

    为了解决这一问题,我们可以使用`jQuery LazyLoad`插件实现图片的延迟加载,即“懒加载”。本文将详细介绍如何利用jQuery LazyLoad来实现图片的懒加载功能,并通过实例进行演示。 ### 1. jQuery LazyLoad 插件简介 ...

    JQuery Lazyload加载图片实例

    为了解决这一问题,jQuery 提供了一个插件——jQuery Lazyload,它允许我们实现图片的延迟加载(也称为懒加载),即图片只在用户滚动到可视区域时才开始加载。这种方式可以显著提升网页的加载速度,特别是对于拥有...

    Hibernate lazy加载FOR Connection

    标题中的“Hibernate lazy加载FOR Connection”指的是Hibernate框架中的一种特性,即懒加载(Lazy Loading)。在Hibernate中,懒加载是一种优化策略,它推迟对关联对象的加载,直到真正需要使用这些对象时才进行加载...

    C#使用Lazy延迟加载

    这个类主要用于实现延迟加载(Lazy Loading),它允许我们推迟对象的初始化,直到真正需要使用该对象时才会执行初始化过程。这种方式在处理大数据集合或者复杂对象时尤其有用,因为它可以避免在不必要时消耗宝贵的...

    Hibernate lazy延迟加载

    开发过程中,可以使用如Hibernate Profiler这样的工具来监控和分析Hibernate的执行行为,帮助识别潜在的懒加载问题和性能瓶颈。 总之,Hibernate的懒加载机制是数据库访问优化的重要手段,但需要谨慎使用,以免引入...

    网页内容延迟加载LazyLoad

    而采用LazyLoad技术,可以显著改善这一问题。当图片位于屏幕之外时,浏览器不会请求这些图片,直到用户滚动到它们所在的位置。这样,用户可以更快地看到页面的主要内容,而不必等待所有资源都加载完成。 实现网页...

    lazyload 即时加载图片(鼠标滑动不同页面时,才加载相应图片)

    即时加载技术,也称为懒加载(Lazy Load),在网页设计和开发中是一种优化策略,用于提升网站性能和用户体验。在本示例中,我们关注的是使用jQuery库实现的图片懒加载,特别是在用户滚动页面时,图片才会按需加载。...

    jquery lazyload延时加载

    总之,jQuery LazyLoad 是一个强大且灵活的工具,它能有效地解决大量图片加载带来的性能问题,提升网页加载速度和用户体验。正确使用并结合合理的优化策略,将使你的网站在资源管理和用户交互方面达到更高的水平。

    js lazyLoad 图片懒加载demo

    懒加载(Lazy Load)技术是JS优化网页性能的一种策略,它延迟了非视口内资源的加载,直到用户滚动到相应位置时才进行加载。这样可以显著减少页面初次加载时的数据量,提升用户体验。 标题中的"js lazyLoad 图片懒...

    图片延迟加载,lazyload.js使用实例

    图片延迟加载(Lazy Load)是一种优化网页性能的技术,它通过只加载用户当前视口内的图片,而将其他未显示的图片推迟到用户滚动到相应位置时再加载,从而减少了页面初次加载的时间,提升了用户体验。在网页设计中,...

    懒加载LazyLoad延时加载图片效果特效.rar

    懒加载(LazyLoad)是一种优化网页性能的技术,它在网页加载时并不会一次性加载所有图片,而是等到用户滚动页面到即将可见区域时,才开始加载相应的图片。这种技术尤其适用于拥有大量图片的网页,如博客、产品展示页...

    前端实现图片懒加载(lazyload)的两种方式

    在前端开发中,图片懒加载(Lazy Load)是一种优化网页性能的技术,它允许网页只在用户滚动到可视区域时才加载图片,而不是一次性加载所有图片。这样可以显著减少页面初始加载时间,提升用户体验,尤其在处理大量...

    动态加载的图片LazyLoad

    在Web开发中,JQuery.LazyLoad是一款非常流行的实现动态加载的插件。它基于JavaScript库jQuery,允许开发者轻松地将延迟加载功能添加到图片或其他HTML元素上。JQuery.LazyLoad的工作原理是监控页面滚动事件,当元素...

    Lazyload图片延迟加载效果

    图片延迟加载,也被称为懒加载(Lazy Load),是一种优化网页性能的技术。在网页设计中,尤其是在含有大量图片的页面上,这种技术能够显著提升页面加载速度,提高用户体验。懒加载的核心思想是仅加载用户当前视口内...

Global site tag (gtag.js) - Google Analytics