1、问题复现
spring 3.0 + hibernate 3.2
spring mvc使用注解方式;service使用@service注解 事务使用@Transactional
事务配置使用
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
在插入或更新数据时,无报错,但数据库中无结果,而查询正常。疑为事务未提交。
2、问题检查
当修改dao层实现逻辑为:
Assert.notNull(entity, "entity不能为空");
Transaction ts = getSession().beginTransaction();
getSession().saveOrUpdate(entity);
getSession().flush();
ts.commit();
logger.debug("save entity: {}", entity);
可以正常提交插入、更新。确定为事务未提交。
3、问题分析
spring mvc使用注解方式时需要使用
<context:component-scan base-package="com.fengzhiyin" />
方式用来扫描该包以及其子包下的@Controller注解的类,纳入spring管理,而同时spring 容器也需要使用这种方式扫描包含@Service、@Components、@Required、@Autowired等注解用来管理bean和完成DI。
当
<context:component-scan base-package="com.fengzhiyin" />
出现在spring mvc的配置文件中时,web 容器在扫描包含@Service或@Components的类并包含@Transaction是,此时@Transaction并为完成,导致事务未被注册。
4、问题解决
将spring mvc中扫描controller的context:component分成两部分,将扫描其他目录的context:component放入application.xml文件中(该文件为)org.springframework.web.context.ContextLoaderListener的加载文件。
如下配置:
<!-- spring mvc 配置文件 -->
<context:component-scan base-package="com.fengzhiyin.controller" />
和
<!-- spring context配置文件 -->
<context:component-scan base-package="com.fengzhiyin.">
<context:exclude-filter type="regex" expression=".*Controller$" />
</context:component-scan>
分享到:
相关推荐
5. **事务管理器配置**:使用`@Transactional`注解进行声明式事务管理,配置事务管理器`txManager`: ```xml <tx:annotation-driven transaction-manager="txManager" /> <bean id="txManager" class="org.spring...
- **声明式事务管理**:通过在配置文件或注解中定义事务边界,简化了事务管理的复杂度。 - **编程式事务管理**:通过TransactionTemplate或PlatformTransactionManager接口直接管理事务。 ```java @Transactional ...
本文主要介绍如何使用基于注解的方式构建Spring MVC与Hibernate相结合的应用程序。这种方式不仅简化了配置过程,而且提高了开发效率。我们将通过一个具体的示例项目来了解整个流程。 #### 开发环境与工具 - **开发...
1. 配置Spring的`<tx:annotation-driven>`:在Spring的配置文件(如`applicationContext.xml`)中,添加如下代码,启用基于注解的事务管理: ```xml <tx:annotation-driven transaction-manager=...
Spring提供了声明式事务管理,可以方便地控制事务的边界: ```xml <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.springframework.orm.hibernate4...
5. **事务管理**:Spring提供了声明式事务管理,可以在`<tx:annotation-driven>`元素中配置,使@Transactional注解生效。这样,你可以直接在需要事务的方法上加上该注解,由Spring自动管理事务的开始、提交或回滚。 ...
在Spring的配置文件中,我们通常会定义一个`<tx:annotation-driven>`元素来启用基于注解的事务管理。例如: ```xml <tx:annotation-driven transaction-manager="transactionManager"/> ``` 这里,`...
Spring提供了多种事务管理方式,从编程式事务管理到声明式事务管理,为开发者提供了灵活的选择。"springmvc事务配置到controller.zip"这个压缩包很可能包含了关于如何在Spring MVC的Controller层配置事务管理的示例...
在SSH项目中,Spring的事务管理通过AOP(面向切面编程)来实现,允许开发者声明式地控制事务边界,无需在代码中显式调用开始事务、提交事务或回滚事务等操作。 接下来,我们将介绍如何在Spring配置文件中设置事务...
例如,我们可以使用`<tx:annotation-driven>`元素启用基于注解的事务管理,并在服务层的方法上添加@Transactional注解来开启事务。此外,还可以在Spring配置文件中手动定义PlatformTransactionManager bean,如...
在配置文件中,注释应详细说明每个元素的作用,例如在Spring的配置文件中,`<tx:annotation-driven>`的`transaction-manager`属性指定哪个事务管理器处理事务,`proxy-target-class="true"`表示使用CGLIB代理而不是...
-- 使用声明式事务 --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans> ``` 综上所述,Struts、Spring 和 Hibernate 三者的集成可以有效地构建出功能强大且易于维护的企业级应用。...
2. **事务管理**:Spring提供声明式事务管理,通过`<tx:annotation-driven>`启用基于注解的事务管理,或在配置文件中手动配置事务规则。 3. **DAO层的实现**:Spring的`HibernateTemplate`或`HibernateOperations`...
在Spring 3.0中,事务管理可以通过声明式方式实现,这通常涉及到在XML配置文件中定义`<tx:annotation-driven>`元素来启用事务管理。在与Hibernate集成时,Spring的PlatformTransactionManager接口的实现,如...
- **XML配置**:通过`<bean>`标签配置`SessionFactory`,`<tx:annotation-driven>`启用事务注解。 - **Java配置**:使用`@Configuration`、`@EnableTransactionManagement`等注解实现相同功能。 - **Service层**...
<tx:annotation-driven transaction-manager="transactionManager"/> <!-- Action类的配置 --> <bean id="userAct" class="com.zhuo.action.UserAct"> <property name="userService" ref="userService"/> </...
<tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ...
可以通过声明式事务管理来简化事务的配置和管理,如使用 `<tx:annotation-driven />` 开启基于注解的事务管理。此外,也可以通过编程式事务管理来手动控制事务的开始、提交和回滚。 以上内容涵盖了 Struts、Spring ...