【问题标题】:Spring @Transactional on class vs on methodSpring @Transactional on 类与方法
【发布时间】:2015-02-23 04:53:29
【问题描述】:

我正在使用Spring BootSpring Data JPA

有以下课程:

import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.REQUIRED)
public class Foo{

    public void bar(){}

}

bar() 和任何其他成员方法是否也是事务性的?

我还有第二个问题。在许多教程中,人们倾向于这样做:

import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
public class Foo{

    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void bar(){}

}

为什么?使用readOnlytruefalse 是否与安全有关?

【问题讨论】:

  • 是的。文档中对此进行了非常清楚的解释:docs.spring.io/spring/docs/4.1.x/spring-framework-reference/…
  • 这里有两个问题:第一个问题是当注解在类级别时,哪些方法是事务性的。第二个问题是关于在方法级别覆盖注释。我仍然看不到第一个问题的答案。想法?

标签: java spring spring-mvc jpa


【解决方案1】:

方法级别的注解完全覆盖了类型级别的注解。

类级别的@Transactional注解将应用于类中的每个方法。

但是,当使用 @Transactional 注释方法时,这将优先于在类级别定义的事务设置。

【讨论】:

  • @ex3v 你的问题已经被这个答案回答了。再读一遍。
  • 对不起,我不清楚。我了解您关于类级别与方法级别的回答。我只是不明白为什么人们在类级别使用readOnly = true 而在方法级别使用readOnly = false
  • @ex3v 因为他们希望类的所有方法默认都是只读的,除了那些用 readOnly=false 注释的方法。
  • @ex3v 来自here的任何帮助
猜你喜欢
  • 2016-10-10
  • 2017-06-18
  • 2013-05-17
  • 1970-01-01
  • 2011-02-21
  • 2015-05-15
  • 1970-01-01
  • 2020-01-23
  • 2021-12-30
相关资源
最近更新 更多