java当在类和方法中都添加了带注释的事务时,如何使事务只在方法中生效?
我接受了一次采访,在采访期间,我被问到了以下问题:当@Transactional
注释同时添加到类和一个方法中,而不是添加到其他方法中时,我如何才能使该方法的事务有效
例如:
@Transactional
public class ClassA {
@Transactional
private void methodA() {
}
private void methodB() {
}
private void methodC() {
}
}
那么,如何确保类中的其他事务不生效?这个问题的重点是什么
# 1 楼答案
您可以更改内部事务的传播类型:
@Transactional(propagation = Propagation.REQUIRES_NEW)
这将创建一个新的内部事务,并暂停外部事务。如果需要内部事务来提交,这可能很有用,但如果其他地方有任何问题,则需要外部事务仍然回滚
我从未使用过类范围的
@Transactional
,但是propagation
属性实际上非常有用我曾在几个案例中使用它来覆盖默认值^{,根据文档,它说:“如果一个事务不存在,就创建一个新事务,否则支持当前事务。”
顺便说一下,我正在使用:
org.springframework.transaction.annotation.Transactional
因此,如果您使用的是另一种
@Transactional
,我的答案不适用还要注意,内部和外部事务的区别是基于HQL的,所以您不需要担心正在使用的SQL方言