我有以下方法调用层次结构
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)
,它仍然会提交交易。所以没有影响
答案 0 :(得分:0)
使用基于代理的Spring AOP时,在同一对象上调用另一个方法不会导致应用方面。 @Transactional for UpdateProcess的实现将在位于UpdateProcess和其他bean之间的代理中创建。因此,如果您从&#34;内部&#34;中调用该方法豆而不是&#34;外面&#34;其中,调用不通过代理,并且不应用方面。