事务与OpenSessionInView Filter天生就是一对矛盾!<wbr></wbr>
主要还在于一个事务粒度的问题,如何才能真正的让OpenSessionInView Filter与事务真正共存呢?
基于google的资料,有四个解决方法,但都没有彻底解决,其问题还是粒度?
如:扩展OpenSessionInView Filer对象,把sessionFlushMode设为Commit,就意味着事务是整个request层,最终在action为了展示而进行弄脏了数据导致数据被更改。如果默认,FlushMode.NEVER模式下,操作数据会报read.only异常。
如果把dao方法,直接flush掉,那就意味着事务粒度只能加载到dao层,在service层的二个dao对数据库操作,事务不同步,如一个dao操作成功另一个失败。如何解决呢?
思路应该是这样:OpenSessionlnVierFilter仍然存在,或者在service层增加一个aop,这个aop表示在操作service层函数进入时把session设为commit,执行完毕业进行session.commit,这样可以解决。找了好多资料,没有一个现存的解决方案,只好自己动手写个aop,事务管理。
花了一天,还没有搞出一个结果。继续看事务,了解如何在需要求进行事务提交的时候进行session FlushMode的更改。如何通过spring可配置方式进行,直接可编程肯定是可以的。
分享到:
相关推荐
为了练手培训,给大家准备的 Open Session In View 的简单例子,纯代码,大家可以参考,其中主要说了六部分内容: ...5.通过 spring aop(aspectJ) 声明事务 6.通过formular 映射参数表,指定两个死的变量
### Spring + Hibernate OpenSessionInView 模式的理解和应用 在Java Web开发中,Spring与Hibernate作为两个重要的框架,经常被一起使用来实现业务逻辑与数据持久化的处理。而在使用这两个框架时,为了更好地管理...
Spring框架是Java开发中不可或缺的一部分,它为开发者提供了丰富的功能,包括依赖注入、面向切面编程、事务管理等。在处理Web应用时,Spring提供了一些关键特性,如`CharacterEncodingFilter`和`...
同时,需要注意的是,OpenSessionInView模式虽然方便,但也会带来潜在的问题,如事务边界不清晰和会话泄漏。因此,在实际应用中,应结合具体需求谨慎使用,并考虑使用更现代的解决方案,如Spring Data JPA的...
- **事务配置**:未配置事务可能导致openSessionInView模式下异常。 - **中文乱码**:需要配置字符编码以解决乱码问题。 **SSH整合的jar包** - **Struts2,Hibernate,Spring**:确保引入了所有必要的jar包,包括...
- **openSessionInView**:通过在 web 层设置一个 filter 来保持 session 打开状态,从而支持整个请求周期内的延迟加载。 #### 8. Spring 事务管理方式及特性 - **管理方式**: - **声明式事务**:通过 XML 或...
Struts2、Hibernate与Spring(通常简称为SSH)是Java Web开发中的三个流行框架。它们的结合可以极大地提高Web应用的开发效率和可维护性。具体来说: - **Struts2**:用于构建MVC架构的应用程序,它负责处理用户的...
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <param-name>singleSession <param-value>true </filter> <filter-mapping> <filter-name>...
7. **Spring事务管理**: - **声明式事务**:通过配置元数据(如XML或注解)来声明事务边界。 - **编程式事务**:直接在代码中调用事务管理API来管理事务。 - **隔离级别**:包括读未提交(READ UNCOMMITTED)、...
Spring事务管理 - **事务类型**:Spring支持声明式事务和编程式事务。 - **隔离级别**:定义了事务在执行时与其他事务之间的隔离程度,包括`DEFAULT`、`READ_UNCOMMITTED`、`READ_COMMITTED`、`REPEATABLE_READ`和...
在实际项目中,还需要在web.xml中配置DispatcherServlet、Struts2的Filter以及Spring的ContextLoaderListener。同时,需要编写相关的配置文件,如struts.xml、hibernate.cfg.xml、applicationContext.xml,以完成各...
- Spring的HibernateTemplate提供了便捷的数据库操作方法,如`save()`, `update()`, `delete()`和`find()`等,并可以结合声明式事务管理,简化事务控制。 以上就是关于Struts、Spring和Hibernate面试题的详细解析...
- **openSessionInView**:通过在 Web 层添加一个 Filter 来维持 Session 的打开状态,从而支持整个请求过程中的延迟加载。 #### 8. Spring 的事务管理 - **事务管理方式**:支持声明式事务管理和编程式事务管理。...
#### 示例:OpenSessionInView Filter - **作用**:保持一个持久化上下文与HTTP请求的生命周期同步,以解决懒加载异常问题。 - **解决方案**:通过在Struts2配置文件中配置`OpenSessionInViewFilter`来实现。 ### ...
- 配置Spring事务管理器: ```xml <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> ``` - 配置Hibernate SessionFactory: ```xml ...
- `spring-tx-*.jar`:事务管理支持。 - `spring-context-*.jar`:Spring的核心上下文支持。 另外还需要添加其他依赖库如`common-pool.jar`用于数据库连接池管理,以及`asm-2.2.3.jar`等用于支持AOP等功能。 **2. ...
一,集成 Spring 与 Hibernate 1,配置SessionFactory 1,配置 ---------------------- applicationContext.xml ------------------------ <!-- 配置SessionFactory(整合Hibernate) --> ...
<filter-name>openSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <!--...--> </filter> ``` 此过滤器保持一个打开的Hibernate ...
#### 八、Spring事务管理 **问题:** Spring支持几种事务管理方式?事务的隔离级别和传播行为有哪些? - **事务管理方式**: 包括声明式事务管理和编程式事务管理。 - **隔离级别**: 包括`DEFAULT`、`READ_...
同时,为了提高性能和减少耦合,通常会使用Spring的AOP功能进行事务管理,使用Spring MVC替换Struts作为表现层框架,以及使用MyBatis等轻量级ORM框架替代Hibernate。总之,理解并熟练掌握SSH框架的搭建与配置,对于...