【问题标题】:spring transaction rollback with @Transaction annotation using jdbcTemplates使用 jdbcTemplates 使用 @Transaction 注释进行弹簧事务回滚
【发布时间】:2017-06-26 11:52:03
【问题描述】:

这是我使用 JdbcTemplate 的示例。由于runTimeException,我的问题doMultipleCalls()在第3步失败,一切都会回滚。 我只对doMultipleCalls@Transactional 注释,但对其他人没有。是否在所有人之间共享相同的事务会话?如果不是如何传递相同的事务会话?

@Component
public class MyRespository {

@Autowired
JdbcTemplate template

@Transactional
public void doMutlipleCalls() {
   callUpdate(); //1
   callInsert(); //2
   callDelete(); //3
}

callUpdate() {
  template.query(...)
}

callInsert() {
   template.query(...)
} 

callDelete() {
   template.query(..)
}

}

【问题讨论】:

    标签: spring-boot spring-data-jpa jdbctemplate spring-transactions


    【解决方案1】:

    它们是否共享同一个事务会话?

    是的。事务在进入doMultipleCalls() 方法之前开始,一旦返回就完成。

    【讨论】:

    • 所以这意味着如果doMultipleCalls 中的任何方法调用(比如 3)抛出 RunTimeException,调用 1 和 2 会回滚吗?
    • 对。任何未经检查的异常都会导致事务回滚
    【解决方案2】:

    当您将 spring jdbc 与 transactional 一起使用时,它的行为方式与使用 jpa 的方式相同。您的操作包含在同一个事务中。

    检查这个article

    【讨论】:

      猜你喜欢
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 2011-01-02
      • 1970-01-01
      相关资源
      最近更新 更多