【发布时间】:2014-01-09 16:25:55
【问题描述】:
我在服务 A 中有带有 @Transactional 的方法 M。
我有 service B extends A 覆盖方法 M。
将被覆盖的方法 M 仍然是事务性的吗? 或者我应该在那里添加 @Transactional?
【问题讨论】:
标签: java hibernate service transactions annotations
我在服务 A 中有带有 @Transactional 的方法 M。
我有 service B extends A 覆盖方法 M。
将被覆盖的方法 M 仍然是事务性的吗? 或者我应该在那里添加 @Transactional?
【问题讨论】:
标签: java hibernate service transactions annotations
大多数时候,您可以在班级级别使用单个 @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 子句来代替它。
请记住,不能拦截私有方法以进行事务包装。这是因为您不能覆盖子类中的私有方法。如果遇到任何此类方法,它们将被静默忽略。
【讨论】:
【讨论】: