如果方法有注释@Transactional(readOnly = true),有没有办法允许内部方法写?
示例:
Class A {
@Transactional(readOnly = true)
public void readFoo(){
b.writeFoo();
}
}
Class B {
public void writeFoo(){}
}
我知道它有点失败了readOnly注释的目的,但我只是想知道是否有办法。
答案 0 :(得分:1)
@Transactional(propagation = Propagation.REQUIRES_NEW)
为我工作。需要注意的是,如果方法接收了一个休眠对象,这将无法工作。这仅在您检索休眠对象并在Propagation.REQUIRES_NEW方法中进行更改时才有效。
答案 1 :(得分:0)
readOnly
注释的 @Transaction
属性只是提示事务管理器。它取决于您用于管理事务的基础技术。它可以只优化事务只读性能(Hibernate),也可以完全忽略readOnly
属性。
我认为如果你注释writeFoo()
,就像这样
@Transactional(readOnly = false, propagation = Propagation.NESTED)
它可以在父只读事务上独立行动,并且可以毫无问题地写入。但我自己没有测试过。