有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring集成@Transactional回滚许多数据库操作

我的问题很简单,我想回滚调用我的服务方法引起的所有数据库更改我对正确的注释有问题。我不确定应该把@Transactional放在哪里,也不确定应该把传播设置为REQUIRES_NEWMANDATORY。我将粘贴我编写的代码,除了抛出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) 个答案

  1. # 1 楼答案

    在spring特定xml的数据源配置中,检查AUTO_COMMIT是否设置为false