首页 > 解决方案 > 我想使用 @Transactional 注释在 Spring Boot 中嵌套事务

问题描述

目前,如果方法 C 发生异常,代码不会从方法 B 回滚数据库更改。我的期望是方法 A 应该以这样的方式管理事务,即如果方法 C 发生异常,代码应该回滚方法 B 中所做的更改。我是使用spring boot,maven项目。

class SomeClassA{

    @Autowired
    SomeClassB someClassB;

    @Autowired
    SomeClassC someClassC;

    @Transactional
    public A(){
        try{
            //This method works fine with some database operations.
            someClassB.B();

            //In this method, exception occurrs.
            someClassC.C();
        }
        catch(Exception e){

        }
    }   
}

class SomeClassB{

    @Transactional
    public B(){
        //some code with database operation
    }   
}

class SomeClassC{

    @Transactional
    public C(){
        //some code with database operation
        //some exception occurs here
    }   
}

标签: spring-bootspring-transactions

解决方案


是检查异常还是运行时异常?

因为默认行为@Transactional

任何 RuntimeException 都会触发回滚,而任何已检查的 Exception 都不会。


推荐阅读