今天遇到的问题如下:
oa项目中,使用到了Spring的AOP对Manager Layer的CUD操作进行了声明式事务管理,相关代码如下:
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager" >
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 配置哪些类哪些方法使用事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* com.hiaward.oa.manager.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
</aop:config>
之前测试过一个OrganizationManagerImpl时CUD操作都是成功的。但今天在测试一个新的Manager Layer PersonManagerImpl的时候,却出现了如下的情况:
Hibernate: insert into T_Person (name, sex, age, address, duty, phone, org_id) values (?, ?, ?, ?, ?, ?, ?)
但对应的表 t_person 里边却没有这条记录,当时第一反映就是事务的问题,于是返回头去测试了下原来 OrganizationManagerImpl的add*方法,居然也是同样的情况,这叫我有点迷,为什么呢?肯定是自己在这中间改了什么设置,是什么呢? 噢,当我看到<aop:pointcut id="allManagerMethod" expression="execution(* com.hiaward.oa.manager.*.*(..))"/>这句时,一下子想到了,由于一开始的设计问题,我曾对Manager Layer的包名进行了重构,把原来的包名 com.hiaward.oa.manager 重构为 现在的 com.hiaward.oa.managers, 而配置文件中的相关部分却忘记了重构,所以导致了这个问题。于是按照想法改了过来,重新测试2个 *ManagerImpl,均成功通过。
总结:当遇到这个问题的时候,一开始定位到了是事务的问题,后来依次寻源,终于找到症结。
分享到:
相关推荐
5. **Spring 事务管理**:了解如何进行声明式事务管理和编程式事务管理。 6. **数据库访问**:使用 JdbcTemplate 或其他 ORM 工具与数据库交互。 7. **Spring 工具类和扩展**:如 Spring Boot、Spring Data、Spring ...
5. **事务管理**:Spring的声明式事务管理使得在多层架构中处理事务变得更加简单。我们可以在配置文件或注解中声明事务边界,由Spring自动处理事务的开始、提交、回滚。 6. **Spring MVC**:对于Web应用,Spring ...
16. `org.springframework.transaction-3.1.0.M1.jar`: 提供了声明式和编程式事务管理,支持JDBC、Hibernate、JDO、JPA等多种数据访问技术。 17. `org.springframework.web.portlet-3.1.0.M1.jar`: 专为portlet环境...
Spring框架提供了强大的事务管理机制,支持声明式事务管理和编程式事务管理两种方式。通过Spring事务管理器,开发者可以方便地控制事务的边界,确保数据的一致性和完整性。 **详细内容:** 1. **声明式事务管理:*...
Spring的AOP模块提供了一种声明式处理横切关注点的方式,如日志、事务管理等。3.0.0.RELEASE中,AOP支持基于注解的切面定义,通过@Aspect、@Before、@After等注解,可以轻松创建和管理切面。 4. **MVC框架的增强**...
他对Spring框架的IOC、DI、AOP编程、声明式事务处理和代理模式有熟练应用,且掌握了Hibernate框架,能够进行一对多、多对多的关系映射,使用HQL,理解对象状态转换和数据缓存机制。 此外,他还擅长使用SpringMVC和...
此外,Spring还包含了对AOP(面向切面编程)、事务管理、数据访问集成等企业级功能的支持。 Struts是MVC(Model-View-Controller)设计模式的一个实现,主要处理Web层的逻辑。它将业务逻辑、表示层和数据访问层解耦...
7. **Spring Data**:对于数据访问层,Spring Data提供了一种声明式的方式进行CRUD操作,同时也支持JPA和JDBC的测试场景。 8. **RESTful API测试**:如果项目涉及到Web服务,可能会使用`MockMvc`进行REST API的...
对于复杂的查询和事务管理,Hibernate提供了一种声明式的方法,减少了手动SQL编写的工作量。 前端界面的重构可以选择使用Java的Vaadin或AngularJS框架。Vaadin是一个基于GWT的现代Web应用框架,它允许开发人员用...