1

我有 2 个公共方法(为了便于理解,我简化了它们)第一个方法调用第二个。我的问题是我是否正确使用@Transactional。当我从其他类调用此方法时,它们应该在事务中

@Transactional
public int f1(Integer a) {
    return f2(a.toString());
}

@Transactional
public int f2(String b) {
 ...
}
4

3 回答 3

4

应该记住,从同一个 bean 调用事务方法将不起作用,因为它绕过了事务代理。在上面的例子中,调用 from1 f1 到 f2 实际上忽略了 f2 方法上的 Transactional 注解。它仍然有效,因为 f1 也是事务性的。

于 2013-08-13T10:15:53.710 回答
1

在此示例中,除非您在该方法中执行需要访问持久数据的操作,否则您不一定需要@Transactionalaround 。f1如果您使用 Spring 的代理 AOP 设置,那么只有来自另一个类的方法调用才会起作用,因为代理 AOP 通过在所有类的方法周围插入一个包装器对象来工作。如果您使用的是 AspectJ,即使使用方法,@Transactional建议也会正常工作。private

于 2013-08-13T10:04:26.900 回答
0

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

于 2013-08-13T10:37:37.577 回答