Sobes.tech
Middle+

Ile transakcji zostanie otwartych, jeśli w klasie są dwie metody, z których każda ma @Transactional propagation REQUIRES_NEW, a z pierwszej wywołujemy drugą?

sobes.tech AI

Odpowiedź od AI

Przy użyciu adnotacji @Transactional z propagation = REQUIRES_NEW, każda metoda będzie wykonywana w swojej własnej, oddzielnej transakcji. Gdy wywoływana jest pierwsza metoda, otwiera się pierwsza transakcja. Podczas wywołania drugiej metody z pierwszej, bieżąca transakcja jest wstrzymywana, a dla drugiej metody otwiera się nowa transakcja. Po zakończeniu drugiej metody, ta transakcja jest zamykana, a pierwsza wznawia działanie.

W sumie zostaną otwarte 2 transakcje: jedna dla pierwszej metody i jedna dla drugiej.

Przykład:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodOne() {
    // transakcja 1
    methodTwo(); // wywołanie drugiej metody
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodTwo() {
    // transakcja 2
}