HIBERNATE的持久化对象加载策略。
延迟加载, 也就是用到的时候才去加载.这样可以提高一些性能.
Hibernate的lazy loading 采用了一个HibernateSession来管理session,它的逻辑是每进行一次数据库操作,就开新的session,操作完成后立即关闭该session。这样做的好处是可以严格关闭session,避免菜鸟级的错误,但是hibernate.org并不推荐这么做。因为这不适合lazy loading,也不适合跨方法的事务。
比如在我们的应用中,user->post形成一对多的映射,User中有一个包含post的List。
在User中,有多个属性:name,password,phone等,还有一个List类型的posts。当我们对posts使用lazy laoding的时候,hibernate会在获得User对象的时候,仅仅返回name,password,phone等基本属性,当你访问posts的时候,它才会从数据库中提取posts需要的数据,这就是所谓lazy laoding。但是在我们的系统中,session是被立即关闭的,也就是在读取了name,password,phone等基本属性后,session已经close了,再进行lazy loaiding就会有异常。
解决办法是在close session之前,调用Hibernate.initialize(user.getPosts()),告诉系统,user.getPosts()是需要lazy laoding的。但是这样做会破坏HibernateSession类的封装.
后来采用所谓的OpenSessionInView模式,把session的周期交给servlet filter来管理,每当有request进来,就打开一个session,response结束之后再关闭它,这样可以让session存在于整个请求周期中。
OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开 Hibernate的Session,一直保持这个Session,直到这个请求结束,具体是通过一个Filter来实现的。
由于Hibernate引入了Lazy Load特性,使得脱离Hibernate的Session周期的对象如果再想通过getter方法取到其关联对象的值,Hibernate会抛出一个 LazyLoad的Exception。所以为了解决这个问题,Spring引入了这个Filter,使得Hibernate的Session的生命周期变长。
有两种方式可以配置实现OpenSessionInView,分别是 OpenSessionInViewInterceptor和OpenSessionInViewFilter,功能完全相同,只不过一个在 web.xml配置,另一个在application.xml配置而已。我个人比较倾向配置在application.xml里,因为web.xml里配置的东西的太多的话容易发生冲突,虽然可以调整,但是毕竟多了个麻烦。
以下是OpenSessionInViewInterceptor配置
view plaincopy to clipboardprint?
<beans>
<bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptor"/>
</list>
</property>
<property name="mappings">
......
</property>
</bean>
......
</beans>
<beans>
<bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptor"/>
</list>
</property>
<property name="mappings">
......
</property>
</bean>
......
</beans>
以下是OpenSessionInViewFilter配置:
view plaincopy to clipboardprint?
<web-app>
......
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
......
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
......
</web-app>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Jermaine/archive/2009/02/01/3857140.aspx
分享到:
相关推荐
这就是Hibernate懒加载(Lazy Load)机制的作用所在。懒加载是一种延迟加载策略,只在真正需要时才加载关联的数据,以减少内存消耗和提高响应速度。 Gilead,全称为Hibernate for Flex,是用于Flex和Hibernate之间...
《jQuery LazyLoad 2.x API详解与应用实践》 在当今网页开发中,为了提高页面加载速度和用户体验,"懒加载"(Lazy Load)技术变得越来越重要。jQuery LazyLoad插件是一个广泛使用的解决方案,它允许图片、iframe等...
《jQuery.Lazyload.js:优化网页加载速度与用户体验的艺术》 在现代网页设计中,页面加载速度和用户体验是至关重要的因素。jQuery.Lazyload.js是一个高效实用的JavaScript插件,它能够显著提升网页加载速度,同时...
**jQuery Lazyload 图片...首先,你需要在项目中引入 jQuery 库以及 jQuery Lazyload 插件。你可以在官方网站或者通过 CDN(内容分发网络)获取它们的 JavaScript 文件。例如,在 HTML 文件中添加以下代码: ```html ...
下面我们将深入探讨jQuery_lazyload的工作原理、优势以及如何在项目中应用。 1. **工作原理**: jQuery_lazyload通过监听滚动事件来实现延迟加载。当用户滚动页面,使得原先不在视口内的图片或者其他元素进入视口...
对于需要懒加载的图片,我们需要在`<img>`标签上添加特定的类名(默认为`lazyload`)以及`data-src`属性,用于存储实际的图片URL。例如: ```html <img class="lazyload" data-src="path/to/image.jpg" alt="图片...
标题中的“lazyload.js演示页面”表明这是一个关于延迟加载技术的示例,主要使用了名为“lazyload.js”的JavaScript库。延迟加载,或称为懒加载,是一种优化网页性能的策略,它只在用户滚动到视口附近的图片或内容时...
**图片懒加载技术详解与"lazyload"使用案例** 在现代网页设计中,为了提高页面加载速度和用户体验,"图片懒加载"(Lazy Loading)技术得到了广泛应用。它是一种优化策略,仅在用户滚动到图像所在区域时才加载图片,...
`tuupola-jquery_lazyload` 这个压缩包可能包含了这两个库的源代码以及相关的示例(demo),帮助开发者理解和使用这个插件。 要使用 `jquery.lazyload.js`,首先确保在页面中引入了 jQuery 和插件本身。通常,我们...
1. **图片未加载**:检查图片路径是否正确,占位符是否已设置,以及 LazyLoad 是否正确初始化。 2. **性能问题**:过多的图片可能会导致滚动性能下降,可以通过增加阈值或者分组加载来优化。 3. **刷新后图片丢失*...
图片延迟加载(Lazy Load)是一种优化网页性能的技术,主要用于处理大量图片或多媒体资源的加载。在网页设计中,当用户滚动页面时,只有进入视口的图片才会开始加载,而那些还未显示出来的图片则会暂时保持占位符...
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的. 在包含很多...
动态加载,也称为延迟加载或懒加载,是一种优化网页性能的...通过查看和分析这个示例,你可以更深入地理解JQuery.LazyLoad的工作原理以及如何解决可能出现的问题。记得在本地环境中运行这个示例,以便于调试和测试。
Magento LazyLoad 插件是针对Magento电子商务平台设计的一款性能优化工具。它的主要功能是实现图片的延迟加载(Lazy Load),以此提升网站的加载速度和用户体验。在网页浏览时,传统方式下所有图片会一次性全部加载...
jQuery.lazyload 是一个非常流行的JavaScript插件,专用于优化网页性能,通过实现图片的懒加载技术。这个插件的核心理念是延迟非视口内的图片加载,直到用户滚动页面并接近这些图片时才进行加载。这样可以显著减少...
在本文中,我们将深入探讨如何使用`lazyload.js`这个JavaScript库来实现这一功能。 ### 1. 懒加载原理 懒加载的基本原理是,当用户滚动页面时,只加载视口内的图片,而那些位于视口之外的图片则暂时不加载。当用户...
在本文中,我们将深入探讨`lazyload.js`的工作原理、使用方法以及如何在实际项目中应用。 ### `lazyload.js`工作原理 1. **监听滚动事件**:`lazyload.js`通过监听浏览器的滚动事件,判断图片是否进入可视区域。 2...
本文将详细介绍 `jQuery LazyLoad` 的工作原理、使用方法以及如何将其应用到实际项目中。 ### 一、什么是延迟加载 延迟加载(Lazy Loading)是指仅加载用户可视区域内的资源,当用户滚动页面时,浏览器才会加载...
Lazyload是通过延迟加载来实现按需加载,达到节省资源,加快浏览速度的目的。 网上也有不少类似的效果,这个Lazyload主要特点是: 支持使用window(窗口)或元素作为容器对象; 对静态(位置大小不变)元素做了大量...