Sobes.tech
Middle+

Колко транзакции ще се отворят, ако в един клас има два метода, всеки с @Transactional propagation REQUIRES_NEW, и от първия метод се извиква вторият?

sobes.tech AI

Отговор от AI

Когато използвате анотацията @Transactional с propagation = REQUIRES_NEW, всяка метод ще се изпълнява в своя собствена отделна транзакция. Когато се извика първият метод, се отваря първата транзакция. При извикване на втория метод от първия, текущата транзакция се спира, и се отваря нова транзакция за втория метод. След като вторият метод приключи, тази транзакция се затваря, а първата продължава.

Общо ще бъдат отворени 2 транзакции: една за първия метод и една за втория.

Пример:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodOne() {
    // транзакция 1
    methodTwo(); // извикване на втория метод
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodTwo() {
    // транзакция 2
}