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