【问题标题】: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)
它可以独立地对父只读事务进行操作,并且可以毫无问题地写入。但我自己没有测试过。