@Transactional 方法内的@Transactional 方法调用(均具有默认传播)

@Transactional method call within @Transactional method (both with default propagation)

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

Parent.java

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

Child.java

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

首先,我的理解是否正确,我应该预料到一切都会回滚?

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

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

一些数据库引擎不支持事务。首先检查你的数据库引擎。 MySQL 的 MyISAM 引擎就是这种情况的一个例子。