【问题标题】:Override transactional method覆盖事务方法
【发布时间】:2014-01-09 16:25:55
【问题描述】:

我在服务 A 中有带有 @Transactional 的方法 M。

我有 service B extends A 覆盖方法 M。

将被覆盖的方法 M 仍然是事务性的吗? 或者我应该在那里添加 @Transactional

【问题讨论】:

    标签: java hibernate service transactions annotations


    【解决方案1】:

    大多数时候,您可以在班级级别使用单个 @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 子句来代替它。

    请记住,不能拦截私有方法以进行事务包装。这是因为您不能覆盖子类中的私有方法。如果遇到任何此类方法,它们将被静默忽略。

    【讨论】:

      【解决方案2】:

      您实际上要问的是:继承方法上的@Transactional 注释。

      简短的回答:不。方法上的注解永远不会被继承。

      长答案:见this post

      【讨论】:

        猜你喜欢
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-29
        • 2015-11-18
        • 2012-06-06
        • 2018-06-21
        • 1970-01-01
        相关资源
        最近更新 更多