whoami3211 2012-10-16 21:43
浏览 248
已采纳

spring事务管理问题

1.mysql中建立了2个表,test1和test2,数据结构都是(int id,varchar name);
2.对test1和test2分别建立各自的DAO层代码和Service代码,集成到ssh环境中,增删查改均正常。
3.现有一新业务,同时往test1和test2表中增加一个字段,如果任一个表增加字段时失败则同时放弃增加字段的业务。该业务写在TestService的save(Test1 test1,Test2 test2) 方法中,其代码如下所示:

[code="java"]package hep.service.lc;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import hep.persist.lc.Test1DAO;
import hep.persist.lc.Test2DAO;

import com.uisk.hep.bo.Test1;
import com.uisk.hep.bo.Test2;

@Service
@Transactional
public class TestService {

private Test1DAO test1DAO;
private Test2DAO test2DAO;

public Test1DAO getTest1DAO() {
    return test1DAO;
}


public void setTest1DAO(Test1DAO test1dao) {
    test1DAO = test1dao;
}


public Test2DAO getTest2DAO() {
    return test2DAO;
}


public void setTest2DAO(Test2DAO test2dao) {
    test2DAO = test2dao;
}




@Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class)
public void save(Test1 test1,Test2 test2)  {
        test1DAO.save(test1);
        test2DAO.save(test2);
}

}
[/code]

spring事务管理配置如下:
[code="java"]
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="add*" propagation="REQUIRED" />
        <tx:method name="save*" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="allManagerMethod"
        expression="execution(* hep.service.lc.*.*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" />
</aop:config>

[/code]

当保存test1后,设置一个异常抛出后,test2没有保存数据,理论上test1也不应该保存数据,但和期望的不一样,数据库记录中明显看到test1的数据了。

请问该如何处理这个事务失效问题?

  • 写回答

4条回答

  • smallbee12345 2012-10-17 08:59
    关注

    1、你已经定义了aop config ,就不要使用@Transactional注解了。
    2、加配置 注意你自己定义抛出的异常时什么异常

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站