为什么Spring在这里提交交易?

时间:2016-11-09 18:43:42

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

我有以下方法调用层次结构

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,或者如果异常发生在层次结构中的任何地方,则回滚。

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

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

1 个答案:

答案 0 :(得分:0)

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