Как Spring Transaction ведет себя по-разному на разных уровнях (уровень сервиса / хранилища) - PullRequest
0 голосов
/ 24 апреля 2019

Привет, мне нужно следующее разъяснение по весенней сделке. Видно как:

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 () относится к тому же классу вызывающего абонента и к другому классу. Так почему же это другое поведение одной и той же операции в другом классе? Что это за концепция?

...