【问题标题】:Why Spring is commiting transaction here?为什么 Spring 在这里提交事务?
【发布时间】:2017-03-23 16:07:27
【问题描述】:

我有下面的方法调用层次结构

public class UpdateProcess   { 

       public void startingMethod(List<Object> objects){
          for (Object obj : objects) {
              method1(obj);
           }
       }

        @Transactional
        public void method1(Object obj) {
            method2(obj);
        }


        public void method2(Object obj) {
           EmployeeService.updateObject(obj)
        }
    }   

public class EmployeeService

    @Transactional
    public void updateObject(Object obj) {

        return customerDao.update(obj);
    }


  }

在上述场景中,我的期望是 spring 应该在线程从 Method1 出来时提交事务,或者如果层次结构中的任何地方发生异常,则回滚。

但是一旦在方法2中执行更新,spring就会提交事务。我不明白为什么?

更新:- 即使我将@Transactional 更改为@Transactional(propagation=Propagation.REQUIRES_NEW),它仍然会提交事务。所以没有影响

【问题讨论】:

标签: java spring hibernate transactions spring-data-jpa


【解决方案1】:

当使用基于代理的 Spring AOP 时,在同一个对象上调用另一个方法不会导致应用方面。 UpdateProcess 的@Transactional 实现将在位于UpdateProcess 和其他bean 之间的代理中创建。因此,如果您从 bean“内部”​​而不是“外部”调用方法,则调用不会通过代理,并且不会应用方面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多