当前位置: 首页 > 知识库问答 >
问题:

当@transactional(readonly=true)方法调用@transactional(readonly=false)方法时会发生什么,反之亦然?

哈和惬
2023-03-14
public class ServiceA {

   ServiceB serviceB;


   @Transactional(readonly = true)
   public void readOnly() {
       
      // some reading from repo

      serviceB.write()
   }

}


public class ServiceB {

   @Transactional
   public void write() {
     
     // some write to repo

   }

}

共有1个答案

丁弘新
2023-03-14

readonly=true调用readonly=false不起作用,因为上一个事务仍在继续。

这是因为前面的事务性正在继续。

如果你想让这个工作,你必须让它开始一个新的事务。示例:

public class ServiceB {

   @Transactional(propagation = Propagation.REQUIRES_NEW)
   public void write() {     
     // some write to repo ..
   }
}
 类似资料:
  • 问题内容: 我在Service类中看到了一种被标记为的方法,但是它也在同一类中调用了其他未标为的方法。 这是否意味着对单独方法的调用导致应用程序打开与DB的单独连接或暂停父事务等? 不带任何注释的方法的默认行为是什么,而另一个带有注释的方法调用该方法的默认行为是什么? 问题答案: 当你调用没有事务块之内的方法时,父事务将继续使用新方法。它将使用与父方法(with )相同的连接,以及在调用的方法中导

  • 嗨,一个星期以来,我一直在追踪我的办公代码中的一个错误。它与Spring、Hibernate和Transaction有关。 我所知道的: 1.延迟加载。 2. Spring如何使用代理和拦截器进行事务管理。 3. Spring中的事务传播,我们的代码使用默认的REQUIRED。 4.每个请求/会话的会话和Hibernate的分离实体基础来保持会话,以及我们的会话不是每个会话的事实。 我的场景:我的

  • 问题内容: 我想知道当你使用注释方法时实际发生了什么?当然,我知道Spring将把该方法包装在Transaction中。 但是,我有以下疑问: 听说Spring创建了代理类?有人可以更深入地解释这一点。该代理类中实际包含什么?实际班级会怎样?我怎么能看到Spring创建的代理类 我还在Spring文档中读到: 注意:由于此机制基于代理,因此仅会拦截通过代理传入的“外部”方法调用。这意味着“自调用”

  • 当使用@Transactional注释方法时,具体会发生什么?Do@Transactional仅在方法包含数据库操作以及需要创建代理时调用 我在采访中被问过几次这个问题,但在阅读各种博客的答案时,我没有得到任何澄清。