这里我们要弄清楚的是为什么要使用OpenSessionInViewFilter?我们是到到这个一般是解决延迟加载出现的问题。那么为什么会有问题呢,首先明确以下几点
- session的开闭,Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session 已经关闭,这些导致延迟加载数据的访问异常。(这里明确下延迟加载,简单说就是当我们没有真正使用实体的属性,并不会触发查询hql,例如我们用到了用户实体的名称时候,才会真正操作数据库去查询)
- spring提供的OpenSessionInViewFilter就解决了此问题。该filter会将session绑定至当前请求的线程上,这样只要是在当前请求的生命周期内,可以随时访问session,只需要在项目的web.xml文件中增加如下配置即可
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sessionFactory</param-value>
</init-param>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name> flushMode </param-name>
<param-value>COMMIT</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 简单说下
FlushMode有5个值可选
Always:任何代码都会Flush
AUTO:默认方式–自动
Commit:COMMIT时
Never:始终不
MANUAL:手动方式
主要是配置何时与数据库同步,主要是因为hibernate的缓存机制,例如一个实体在缓存中存在,就不会查询据库 详细参考http://blog.csdn.net/lssssss/article/details/6839633
以上说明有个更详细文章http://blog.csdn.net/a19881029/article/details/7916702
相关推荐
通过阅读《OpenSessionInViewFilter说明.doc》文档,你可以更深入地了解其内部实现细节、配置方法以及如何在实际项目中合理使用。这个文档应该包含了OpenSessionInViewFilter的源码分析、配置示例以及常见问题的解答...
OpenSessionInViewFilter个人学习总结
在这个配置说明中,开发者使用的是Struts2.3、Spring3.1.2和Hibernate4.1.6的版本。 首先,我们需要了解这三大框架的基本作用: - **Struts2**:是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,...
在本文中,我们将详细讲解如何使用 SSH 框架中的 Ajax 获取的 JSON 格式数据处理过程,并且实现菜单联动下拉框的功能。 一、Ajax 中 response 返回的数据是一个二维数组 在 Ajax 中,response 返回的数据是一个二...
通过配置OpenSessionInViewFilter,可以在很大程度上解决懒加载异常的问题,尤其是在Java Web应用中使用Hibernate等ORM框架时。当然,还需要根据实际项目的具体情况,灵活调整和优化配置,以达到最佳的性能和稳定性...
我们可以通过配置XML文件和注解来实现整合,并使用opensessionInviewfilter来解决会话问题。 Spring JDBC面向接口编程 本节讲解了如何使用Spring JDBC来实现面向接口编程。我们可以通过配置XML文件和注解来实现DAO...
2. **参数说明**: - `singleSession`:如果设置为`true`,则表明启用OpenSessionInView模式,即在请求处理期间始终维持一个打开的Session。如果设置为`false`,则不启用此模式。 - `<url-pattern>`:定义哪些URL...
**Hibernate** 是一个对象关系映射(ORM)工具,它将数据库操作抽象为对象,使得开发者可以使用面向对象的方式进行数据操作。Hibernate提供了Session和Transaction API,用于执行CRUD操作。OpenSessionInView(OSIV...
在使用这个压缩包时,开发者需要按照一定的顺序进行配置:首先设置Hibernate的连接信息和实体映射,然后在Spring中配置数据源、事务管理器和Hibernate SessionFactory,接着配置Struts2的动作类、结果类型和拦截器。...
下面分别给出使用OpenSessionInViewInterceptor和OpenSessionInViewFilter的配置示例: ##### OpenSessionInViewInterceptor配置 ```xml class="org.springframework.orm.hibernate3.support....
### Spring监听器与过滤器详解...- **Spring Web环境下的监听器和过滤器**:在Spring MVC环境中,除了上述提到的OpenSessionInViewFilter和CharacterEncodingFilter,还有多种其他类型的过滤器和监听器可以使用,例如`...
当使用其他框架(如Struts2)时,需要注意`OpenSessionInViewFilter`与这些框架中过滤器的顺序。例如,在上面的例子中,`OpenSessionInViewFilter`被配置在`webwork`过滤器之前,这是为了确保在处理Struts2相关的...
除了使用 OpenSessionInViewFilter 之外,我们还可以使用 Hibernate 的 initialize 方法来强制加载关联数据。例如: ```java SetRepayment setRepayment = setRepaymentDao.get(setRepaymentId); if (setRepayment ...
### 保险公司大客户管理系统架构设计说明书 #### 一、引言 随着信息技术的发展,保险公司面临着越来越多的数据处理需求,特别是对于大客户的管理。为了提高管理效率和服务质量,许多保险公司选择使用基于Struts、...
在处理Web应用时,Spring提供了一些关键特性,如`CharacterEncodingFilter`和`OpenSessionInViewFilter`,它们对于解决特定问题至关重要。 首先,让我们深入了解一下`CharacterEncodingFilter`。在Web应用中,字符...
本文将详细地介绍如何从零开始搭建一个完整的SSH框架,并为初学者提供一套可参照的实践指南。 #### 二、准备工作 1. **安装Eclipse或IntelliJ IDEA**:作为开发环境的基础工具。 2. **安装JDK**:确保系统已经正确...
在 OpenSessionInViewFilter 中,需要配置 Hibernate 的 Session 管理,以便实现 Hibernate 的 Session 的打开和关闭。 9. web.xml 配置 在 web.xml 文件中,需要配置 Servlet 监听器、上下文变量、Filter 等,...
OpenSessionInViewFilter解决Web应用程序的问题