Spring - 由@Transactional(readOnly = true)方法调用的内部方法

时间:2013-05-03 03:17:05

标签: spring hibernate spring-transactions

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

示例:

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

Class B {
   public void writeFoo(){}
}

我知道它有点失败了readOnly注释的目的,但我只是想知道是否有办法。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

readOnly注释的

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

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

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

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