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