有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java当在类和方法中都添加了带注释的事务时,如何使事务只在方法中生效?

我接受了一次采访,在采访期间,我被问到了以下问题:当@Transactional注释同时添加到类和一个方法中,而不是添加到其他方法中时,我如何才能使该方法的事务有效

例如:

@Transactional
public class ClassA {

     @Transactional
     private void methodA() {
     } 

     private void methodB() {
     }

     private void methodC() {
     }
}

那么,如何确保类中的其他事务不生效?这个问题的重点是什么


共 (1) 个答案

  1. # 1 楼答案

    您可以更改内部事务的传播类型:

    @Transactional(propagation = Propagation.REQUIRES_NEW)

    这将创建一个新的内部事务,并暂停外部事务。如果需要内部事务来提交,这可能很有用,但如果其他地方有任何问题,则需要外部事务仍然回滚

    我从未使用过类范围的@Transactional,但是propagation属性实际上非常有用

    我曾在几个案例中使用它来覆盖默认值^{,根据文档,它说:“如果一个事务不存在,就创建一个新事务,否则支持当前事务。”

    顺便说一下,我正在使用:

    org.springframework.transaction.annotation.Transactional

    因此,如果您使用的是另一种@Transactional,我的答案不适用

    还要注意,内部和外部事务的区别是基于HQL的,所以您不需要担心正在使用的SQL方言