Spring Transaction如何在不同的层(服务/存储层)中表现不同

时间:2019-04-24 07:36:58

标签: spring-mvc spring-transactions

嗨,我需要对春季交易做出以下澄清。看到像:

Service1.java

@Service
@Repository
public class Service1 {

    @Autowired
    EmployeeRepo employeeRepo;

    @Autowired
    Repo repo;

    @Transactional
    public void m() {

        employeeRepo.save(new Employee(5, "N3", 33, 3000));
        repo.m1();  //M1
        //m1();       //M2
        System.out.println(1/0);   //M3
    }

    @Transactional(propagation=Propagation.REQUIRES_NEW)
    public void m1() {

        Employee e=employeeRepo.findOne(1);
        //System.out.println(1/0);  //M4
        e.setAge(212);
    }   
}

Repo.java

@Repository
class Repo{

    @Autowired
    EmployeeRepo employeeRepo;

    @Transactional(propagation=Propagation.REQUIRES_NEW)
    public void m1() {

        Employee e=employeeRepo.findOne(1);
        //System.out.println(1/0);  //M5
        e.setAge(212);

    }

}

案例:

按原样执行时,没有插入,只有更新完成,但有异常 2.(重置)在注释M1和不注释M2时,则不插入任何内容,但不进行任何异常更新(同一类中的方法)

3.(重置)在取消注释M5和注释M3时,没有插入操作,没有例外情况除外

4.(重置)取消注释M2,M4并注释M1,M3时,没有插入操作,没有例外情况不会进行任何更新

注意:相同的m1()方法位于相同的调用方调用中,并且位于不同的类中。 那么为什么在不同的类中同一操作的这种不同行为呢?那是什么概念?

0 个答案:

没有答案