@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 引擎就是这种情况的一个例子。
我有以下设置(这是一个类比),并且不会回滚 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 引擎就是这种情况的一个例子。