嵌套的 @Transactional

28

在Spring中,是否可以嵌套使用带有@Transactional注解的方法?考虑以下示例:

@Transactional
public void a() {
    obj.b();
}

@Transactional
public void b() {
    // ... 
}

如果在b()中回滚并在a()中也回滚会发生什么?

1个回答

47

在方法a()中被调用的方法会自动继承@Transactional的传播属性REQUIRED,因此b()方法上的第二个@Transactional注释是不必要的。如果您想在由a()方法调用的方法中启动新的事务,则需要修改传播规则。请阅读有关事务传播的信息。


1
由于b是公共的,如果其他调用者独立于a使用它,那么最佳实践是什么? - Adam Hughes
我认为如果它是公共的,那么它必须有@Transactional注释。在我的情况下,我不得不更改为私有可见性。 - Daniel Rch.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接