【问题标题】:Spring - inner methods called by @Transactional(readOnly = true) method to writeSpring - @Transactional(readOnly = true) 方法调用的内部方法来编写
【发布时间】:2013-05-03 03:17:05
【问题描述】:

如果一个方法有注解@Transactional(readOnly = true),有没有办法允许内部方法写?

例子:

Class A {
   @Transactional(readOnly = true) 
   public void readFoo(){
       b.writeFoo();
   }
}

Class B {
   public void writeFoo(){}
}

我知道这有点违背了使用 readOnly 注释的目的,但我只是想知道是否有办法。

【问题讨论】:

    标签: spring hibernate spring-transactions


    【解决方案1】:

    @Transactional(propagation = Propagation.REQUIRES_NEW) 为我工作。需要注意的一点是,如果该方法接受一个休眠对象,这将不起作用。这仅在您检索休眠对象并在 Propagation.REQUIRES_NEW 方法中进行更改时才有效。

    【讨论】:

      【解决方案2】:

      @Transaction 注释的readOnly 属性只是对事务管理器的提示。这取决于您用于管理事务的底层技术。它可以优化事务只读性能(Hibernate),也可以完全忽略readOnly 属性。

      我认为如果你注释 writeFoo() 即像这样

      @Transactional(readOnly = false, propagation = Propagation.NESTED)
      

      它可以独立地对父只读事务进行操作,并且可以毫无问题地写入。但我自己没有测试过。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        • 2016-06-06
        • 2022-11-21
        • 2017-06-06
        • 1970-01-01
        • 1970-01-01
        • 2015-03-14
        相关资源
        最近更新 更多