我在服务A中使用 @Transactional 方法M.
我有service B extends A
覆盖方法M。
将覆盖方法M仍然是事务性的吗? 或者我应该添加 @Transactional ?
答案 0 :(得分:5)
答案 1 :(得分:2)
大多数情况下,您可以在课程级别使用单个@Transactional。但有时您需要自定义一种方法以表现不同。在这些情况下,使用相同的@Transactional注释标记所有其他方法仍然是多余的。
Warp-persist提供了一个工具,您可以根据需要使用特定方法的特定@Transactional覆盖类的事务行为:
@Transactional
public class MyRepository {
public void save(Thing t) { .. }
@Transactional(rollbackOn = NoSuchEntityException.class) //optional
public void remove(Thing t) { .. }
public Thing fetch(Long id) { .. }
}
在上面的示例中,save()和fetch()具有在类级别指定的标准事务行为。但是remove()有一个特定的rollbackOn子句,而不是使用它。
请记住,无法拦截私有方法以进行事务包装。这是因为您无法覆盖子类中的私有方法。如果遇到任何此类方法,将默默忽略它们。