首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >@Transactional不使用Spring Boot和JDBC

@Transactional不使用Spring Boot和JDBC
EN

Stack Overflow用户
提问于 2018-06-01 16:39:56
回答 2查看 3.2K关注 0票数 3

我的服务应该将数据保存到父数据库表和子数据库表中,并在发生错误时进行回滚。我尝试使用硬编码的RuntimeException强制执行错误,发现事务无论如何都会被提交。我错过了什么?我使用的是Spring Boot2,包括spring-boot-starter-jdbc依赖。

数据库为Oracle 11g。

主要配置:

代码语言:javascript
复制
@SpringBootApplication
@EnableTransactionManagement
public class MyApplication extends SpringBootServletInitializer{

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(MyApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

服务层:

代码语言:javascript
复制
    @Service
    public class MyBean {

    private final NamedParameterJdbcTemplate jdbcTemplate;        
    private final MyDAO myDao;

    @Autowired
    public MyBean (NamedParameterJdbcTemplate jdbcTemplate, MyDAO myDao) {
        this.jdbcTemplate = jdbcTemplate;
        this.myDao= myDao;
    }

    @Override
    @Transactional
    public void saveData(...){
        myDao.saveData(jdbcTemplate, ...);
    }

}

DAO:

代码语言:javascript
复制
public void saveData(jdbcTemplate, ...){
    saveDataInParentDatatable(jdbcTemplate, ...);
    saveDataInChildDatatable(jdbcTemplate, ...);
}
private void saveDataInChildDatatable(jdbcTemplate, ...){
    throw new RuntimeException();
}
EN

回答 2

Stack Overflow用户

发布于 2018-06-01 18:00:12

试试这个:

代码语言:javascript
复制
@Transactional(propagation = Propagation.MANDATORY, rollbackFor = Exception.class)
票数 1
EN

Stack Overflow用户

发布于 2018-06-01 17:03:40

推荐使用:

代码语言:javascript
复制
@Transactional(rollbackFor = {Exception.class, RuntimeException.class})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50639361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档