我有2个公共方法(为了便于理解,我简化它们) 第一种方法叫第二种。我的问题是我是否正确使用@Transactional。当我从其他类调用此方法时,它们应该在事务
中@Transactional
public int f1(Integer a) {
return f2(a.toString());
}
@Transactional
public int f2(String b) {
...
}
答案 0 :(得分:4)
应该记住,从同一个bean调用事务方法是行不通的,因为它会绕过事务代理。在上面的例子中,调用from1 f1到f2实际上忽略了f2方法上的Transactional注释。它仍然有效,因为f1也是交易性的。
答案 1 :(得分:1)
在此示例中,除非您在该方法中执行需要访问持久数据的操作,否则您不一定需要@Transactional
f1
。如果你正在使用Spring的代理AOP设置,那么只有来自另一个类的方法调用才有效,因为代理AOP的工作原理是在所有类的方法周围插入一个包装器对象。如果您使用的是AspectJ,@Transactional
建议即使使用private
方法也能正常使用。
答案 2 :(得分:0)
通过使用事务传播,您可以实现您想要的任何目标。
http://static.springsource.org/spring/docs/3.0.x/reference/transaction.html#tx-propagation