java - 包含 Spring 的 @Transactional 注解的方法的方法转发?

标签 java hibernate spring

我有一个服务实现,如下所示:

class FooImpl implements Foo {

   @Override
   @Transactional(...)
   public void doSomething(String baz) {
       return this.doSomething(Arrays.asList(new String[] { baz }));
   }


   @Override
   @Transactional(...)
   public void doSomething(List<String> bazList) {
        // do something crazy
        return null;
   }

}

我想了解一下,这里发生了什么?我正在从另一个带有 @Transactional 注释的方法调用一个带有 @Transactional 注释的方法(方法转发)...

我的问题:
我上面的情况是否造成了任何奇怪的情况?它似乎工作正常,所以我认为正在使用外部事务并且没有创建新事务。它是否正确?另外,关于如何验证/调试这个的任何提示?

最佳答案

这是一个典型的情况。 @Transactional 有一个propagation 属性。此属性定义调用 @Transactional 方法时的行为 - 是否需要新事务、是否需要现有事务等。

默认情况下,传播是REQUIRED,这意味着 - 如果不存在则将启动一个新事务;否则将使用现有的。

Read here about transaction propagation .

这里要提到的另一件事是,(在某些配置场景中)如果您调用同一类的方法,则不会触发事务拦截器,因此根本不考虑传播。因此,在您的情况下,第二种方法中的 @Transactional 很可能被忽略。

关于java - 包含 Spring 的 @Transactional 注解的方法的方法转发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6915012/

相关文章:

java - 如何检查 session 是否是手动打开的?

java - AggregatingMessageHandler 的手动 ACK

java - Dart:如何设置项目

Spring Hibernate 事务在没有刷新的情况下不提交

java - 我可以在此示例中使用集合或列表吗?

java - Http 出站网关从 pojo 负载发送 Json 请求

java - 可以使用 Spring 安全性根据访问级别隐藏/显示下拉值

java - 在这种情况下,将创建 UserHandler 类的多少个实例?

java - Netty- 无法访问类 jdk.internal.misc.Unsafe

java - 尝试在 Freemarker 中输出双倍金额时出现奇怪的字符