Spring Boot JDBC @Transactional 不会回滚

Stu*_*ame 2 java postgresql transactions jdbc spring-boot

我已经实现了一个类,我需要将一些数据插入数据库,但如果出现问题,插入必须回滚。一旦我执行了插入,我就会抛出一个异常来测试回滚,但是一旦我检查数据库,行就会被插入,这意味着回滚从未发生。

import org.springframework.transaction.annotation.Transactional;
public class SomeClass{
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Transactional
    public void insertToDb() throws Exception{
        String sql = "INSERT STUFF"
        jdbcTemplate.update(sql);
        throw new Exception();
    }
}
Run Code Online (Sandbox Code Playgroud)

Kno*_*nox 8

参考文档 @Transactional

如果在此注释中未配置自定义回滚规则,则事务将在 RuntimeException 和 Error 时回滚,但不会在已检查的异常上回滚。

由于Exception是检查异常,所以默认不会执行回滚。您需要抛出 a (或扩展)的内容RuntimeException,或者在注释属性中列出异常rollbackFor

@Transactional(rollbackFor = Exception.class)
Run Code Online (Sandbox Code Playgroud)