【问题标题】:@Transactional method call within @Transactional method (both with default propagation)@Transactional 方法中的@Transactional 方法调用(都具有默认传播)
【发布时间】:2019-04-24 09:47:43
【问题描述】:

我有以下设置(这是一个类比),并且方法B 上的存储库更改不会回滚。传播应该是默认 = REQUIRED,那么解释是什么?

父类.java

@Transactional
public void methodA(){
   child.methodB();
   anotherMethodThatThrowsARuntimeException();
}

子.java

@Transactional
public void methodB(){
   repository.save(entity)
}

首先,我的理解是否正确,因为我应该期望所有内容都回滚?

即使当这段代码被包装在@Transactional(isolation = Isolation.READ_UNCOMMITTED) 测试下时所有这些情况都发生了?

编辑:只是为了解决问题:问题在于。SQL 回滚确实是在外部事务的末尾,但托管上下文没有被清除,因此从内部事务的回滚不可见

【问题讨论】:

  • 您的期望是正确的。但我无法重现该问题。可以提供MVCE吗?
  • 我正在尝试对在这样的事情之前解释异常的位置进行一些测试,首先我想知道我是否处于正确的假设中

标签: spring spring-data-jpa spring-transactions jta transactional


【解决方案1】:

某些数据库引擎不支持事务。首先检查您的数据库引擎。 MySQL的MyISAM引擎就是这个案例的一个例子。

【讨论】:

    猜你喜欢
    • 2015-12-19
    • 2011-09-07
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多