Spring Integration @Transactional回滚许多数据库操作

时间:2012-09-20 16:12:39

标签: java spring hibernate rollback transactional

我的问题很简单,我想要回滚因调用我的服务方法而导致的所有数据库更改。我有正确注释的问题。我不确定将@Transactional放在哪里,我应该将传播设置为REQUIRES_NEW还是MANDATORY。我将粘贴我编写的代码,除了SQLException被抛出的事实不回滚数据库更改

代码:

@Service
public class SwapInsertService {

    @Autowired
    MyDao myDao;

    @Transactional(propagation = Propagation.REQURIES_NEW, rollbackFor = SQLException.class)
    public void insertToManyTables(MyData data) throws SQLException {

        insertToSpecificTables(data);
        myDao.insertTwo(data);
    }

    @Transactional(propagation = Propagation.MANDATORY)
    public void insertToSpecificTables(MyData data) throws SQLException {

        myDao.insertOne(data);
    }
}

@Repository
public class MyDaoImpl implements MyDao {

    @Transactional(propagation = Propagation.MANDATORY)
    public void insertOne(MyData data) throws SQLException {

        // INSERT
    }

    @Transactional(propagation = Propagation.MANDATORY)
    public void insertTwo(MyData data) throws SQLException {

        // throws SQLException 
    }
}

我们假设insertTwo抛出SQLException。我想回滚所有以前的插入。 我做错了什么?

我的理解:

Propagation.REQURIES_NEW创建新交易。 Propagation.MANDATORY支持当前交易。

insertTwo抛出错误,insertToManyTables回滚所有内容并发出声音。不幸的是,这并不容易。

编辑:重要的是要提到我正在使用CGLIB代理。

1 个答案:

答案 0 :(得分:4)

检查spring特定xml

中的数据源配置中AUTO_COMMIT是否设置为false