spring aop 事务控制 为何异常时不会滚呢?

问题描述:

spring事务相关配置

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>



<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="add*" propagation="REQUIRED" />
        <tx:method name="upd*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
        <tx:method name="del*" propagation="REQUIRED" />
        <tx:method name="*" propagation="SUPPORTS" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="canyin" expression="execution(* com.laphone.base.baseservice.*.*(..)) ||execution(* com.laphone.canyin.*.service.*.*(..)) || execution(* com.laphone.canyin.*.*.service.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="canyin" />
</aop:config>

service中的方法updForOrder()使用了try catch(Exception e);
但是出现异常时还是有部分数据存到了数据库,说明异常时没有回滚。

请问xdjm们有没有碰到过这种问题,****上有很多这种问题,但几乎都试过,没能解决
分不多,海涵~

哦,不好意思,没看到,
你的问题应该就是一楼说的
大概你没理解1楼的意思,
[code="java"]try {
xxxx;
} catch (xxx e) {
throw e;// 或者throw new XXXE(e)
}[/code]

service中的方法updForOrder()使用了try catch(Exception e)
捕获后是否抛出了Exception或RunTimeException?不抛出异常事务就不能够回滚

Spring AOP默认只有RuntimeException才Rollback,你确认你抛的是runtime的?
如果你不想抛runtime的,那就在事务声明上配上你那个exception需要回滚

还有,你确认用的不是MySql那个不支持事务的引擎?好像叫什么ISAM?