Open Session in View的作用,就是允许在每次的整个request的过程中使用同一个hibernate session,可以在这个request任
何时期lazy loading数据。
如果是singleSession=false的话,就不会在每次的整个request的过程中使用同一个hibernate session,而是每个数据访问都会产生各自的seesion,等于没有Open Session in View.
OpenSessionInViewFilter默认是不会对session 进行flush的,并且flush mode 是 never
代码:
protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
Session session = SessionFactoryUtils.getSession(sessionFactory, true);
session.setFlushMode(FlushMode.NEVER);
return session;
}
看getSession的方式就知道,把flush mode 设为FlushMode.NEVER,这样就算是commit的时候也不会session flush,
如果想在完成request过程中更新数据的话, 那就需要先把flush model设为FlushMode.AUTO,再在更新完数据后flush.
.
OpenSessionInView默认的FlushMode为
代码:
FlushMode.NEVER
::::::::::解决方法::::::::::::
可以采用spring的事务声明解决,示例代码如下:
<!-- 声明一个 Hibernate 3 的 事务管理器供代理类自动管理事务用-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<aop:config>
<!-- 切入点指明了在执行com.ssh2.manager包中的所有方法时产生事务拦截操作 -->
<aop:pointcut id="daoMethods" expression="execution(* com.ssh2.manager.*.*(..))"/>
<!-- 定义了将采用何种拦截操作,这里引用到 txAdvice -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethods"/>
</aop:config>
<!-- 事务通知操作,使用的事务管理器引用自transactionManager -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 指定哪些方法需要加入事务 -->
<tx:method name="getPageTable*" propagation="REQUIRED"/>
<tx:method name="getTotalRecodes" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
相关推荐
OpenSessionInViewFilter是Spring框架中一个非常重要的组件,主要用于解决数据访问层(DAO)与视图层(View)之间的事务管理问题。在Web应用中,由于HTTP请求的无状态性,一次请求通常由多个Servlet过滤器、控制器和...
- 在高并发场景下,需要注意OpenSessionInViewFilter可能会导致的性能问题,因为它使得Session的生命周期变长,增加了Session占用资源的时间。 - 如果项目中同时使用了其他Session管理机制,需要确保它们之间不会...
在探讨如何通过`OpenSessionInViewFilter`来有效管理Hibernate中的Session生命周期之前,我们需要先理解Session及其生命周期的基本概念。 #### Session与生命周期 在Hibernate框架中,`Session`是执行数据库操作的...
该模式的核心在于通过Spring提供的`OpenSessionInViewFilter`过滤器,在视图渲染过程中保持Hibernate Session的打开状态,从而简化了事务管理,并避免了一些常见的懒加载异常。 #### 一、OpenSessionInViewFilter...
在处理Web应用时,Spring提供了一些关键特性,如`CharacterEncodingFilter`和`OpenSessionInViewFilter`,它们对于解决特定问题至关重要。 首先,让我们深入了解一下`CharacterEncodingFilter`。在Web应用中,字符...
### Spring监听器与过滤器详解...- **Spring Web环境下的监听器和过滤器**:在Spring MVC环境中,除了上述提到的OpenSessionInViewFilter和CharacterEncodingFilter,还有多种其他类型的过滤器和监听器可以使用,例如`...
2. **OpenSessionInViewFilter**:通过Web容器的过滤器(filter)来实现。 #### 异常原因 当使用Open Session In View模式时,如果Session的Flush Mode被设置为NEVER,并且尝试执行写操作(如更新或删除),就会触发...
在`web.xml`中配置Spring监听器以初始化Spring容器,并添加`OpenSessionInViewFilter`以解决懒加载问题: ```xml <listener-class>org.springframework.web.context.ContextLoaderListener <filter-name>...
当请求处理完毕后,通过`OpenSessionInViewFilter`或`OpenSessionInViewInterceptor`,Session会在合适的时机被自动关闭,释放资源。 `OpenSessionInViewInterceptor`是在Spring的MVC环境中配置的拦截器,它需要在`...
在 OpenSessionInViewFilter 中,需要配置 Hibernate 的 Session 管理,以便实现 Hibernate 的 Session 的打开和关闭。 9. web.xml 配置 在 web.xml 文件中,需要配置 Servlet 监听器、上下文变量、Filter 等,...
在`web.xml`中,Struts2的配置通过`StrutsPrepareAndExecuteFilter`进行,而Spring与Hibernate的集成则通过`OpenSessionInViewFilter`实现。这些配置保证了请求到达时,Struts2能正确处理请求,同时Spring能够管理和...
这个案例提供了一个基础的登录功能,同时展示了S2SH集成的各个方面,包括OpenSessionInViewFilter的使用、声明式事务管理以及三层架构的设计。 首先,让我们从Struts2开始。Struts2作为控制层,负责处理HTTP请求,...
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter ``` - **`OpenSessionInViewFilter`**:开启Hibernate的Session,在视图渲染完成后关闭Session,确保每个HTTP请求都在同一个...
Spring框架还提供了一系列的过滤器来处理Web应用中的请求,例如OpenSessionInViewFilter用于解决Hibernate懒加载问题。 - **OpenSessionInViewFilter**:此过滤器在请求处理开始时打开一个Hibernate会话,在请求...
在这里,我们使用了 OpenSessionInViewFilter 来实现 Hibernate 的 Session 的管理。同时,我们还使用了 JQuery 库来实现 JSON 数据的处理。 五、CSS 样式表的实现 在 CSS 样式表中,我们使用了 cursor:pointer ...
- **Hibernate会话管理过滤器**:OpenSessionInViewFilter确保在每个请求的生命周期内保持一个打开的Hibernate Session,从而实现懒加载: ```xml <filter-name>OpenSessionInViewFilter <filter-class>org....
- 在`web.xml`中设置Spring的`ContextLoaderListener`监听器加载上下文,以及`OpenSessionInViewFilter`过滤器,确保每个请求都有一个打开的Session。 - 配置Struts2的Filter,确保请求匹配`.action`结尾的URL,...
2. **OpenSessionInView模式**: 为了防止Session在请求结束后关闭导致数据丢失,我们可以使用`OpenSessionInViewFilter`。这个过滤器在每次请求开始时打开Session,结束时关闭,保证在整个视图渲染过程中Session都是...
- **解决方案**:使用 OpenSessionInViewFilter 过滤器,在请求开始时打开 Session,并在请求结束时关闭 Session。 2. **DAO层**:使用 Hibernate 来实现数据访问操作。 3. **业务层**:利用 Spring 的依赖注入和...