日期:2014-05-19  浏览次数:20708 次

求救:spring aop事务配置 出错不回滚
事务配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 该文件用于事务管理 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
  http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://www.springframework.org/schema/tx 
  http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
  http://www.springframework.org/schema/aop 
  http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<!-- Hibernate事务管理器 -->
<bean id="transactionManagerHibernate" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
<!-- 默认超时时间
<property name="defaultTimeout" value="1000" /> -->

</bean>


<!-- 事务管理处理器 -->
<tx:advice id="txAdvice" transaction-manager="transactionManagerHibernate">
<tx:attributes>
<!-- 对切面(aop:config)拦截的所有实体类的所有方法按一定规则进行事务管理 -->
<!-- 对所有方法使用SERIALIZABLE(序列化)隔离级别,对所有(继承自)Excception的异常进行回滚 timeout="1000000000"-->

  <tx:method name="find*" read-only="true"/>
  <tx:method name="get*" read-only="true"/>
  <tx:method name="paginate*" read-only="true" />
  <tx:method name="search*" read-only="true"/>
  <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>
  <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
  <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
  <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
  <tx:method name="remove*" propagation="REQUIRED" rollback-for="Exception"/>
  <tx:method name="start*" propagation="REQUIRED" rollback-for="Exception"/>
  <tx:method name="approve*" propagation="REQUIRED" rollback-for="Exception"/>
  <tx:method name="disapprove*" propagation="REQUIRED" rollback-for="Exception"/>
  <tx:method name="submit*" propagation="REQUIRED" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>

<!-- 事务管理切面 -->
<aop:config>
<!-- 拦截com.dbw.ghr.persistence.service.impl包及其子包下的所有实体类的所有方法,无论任何作用域(public,private) -->
<!-- 拦截com.dbw.ghr.workflow.impl包及其子包下的所有实体类的所有方法,无论任何作用域(public,private) 
|| execution(* com.dbwen.ehr.workflow.impl.*.*(..))
-->
<aop:pointcut id="serviceMethod" expression="execution(* com.dbwen.ehr.*.service.impl.*.*(..))" />
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
</aop:config>
</beans>


代码如下:
DAOImpl:
package com.dbw.core.dao.hibernate;
p