Java 重写事务方法
我在服务A中使用了带有@Transactional的方法M 我有Java 重写事务方法,java,hibernate,service,transactions,annotations,Java,Hibernate,Service,Transactions,Annotations,我在服务A中使用了带有@Transactional的方法M 我有服务B使用重写的方法M扩展了A 是否将重写方法M仍然是事务性的? 或者我应该在这里添加@Transactional?大多数时候,你可以在类级别上使用单个@Transactional。但有时您只需要自定义一个方法,以实现不同的行为。在这些情况下,使用相同的@Transactional注释标记所有其他方法仍然是多余的 Warp persist提供了一种工具,您可以在其中使用特定方法上的特定@transactional重写类的事务行为(如
服务B使用重写的方法M扩展了A
是否将重写方法M仍然是事务性的?
或者我应该在这里添加@Transactional?大多数时候,你可以在类级别上使用单个@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子句,它被用来代替
请记住,不能拦截私有方法进行事务包装。这是因为不能重写子类中的私有方法。如果遇到任何这样的方法,它们都将被默默地忽略。您实际要问的是:该方法上的@Transactional注释是继承的吗 简短回答:不是。方法上的注释永远不会被继承 长回答:看