Senior
Dlaczego metoda z @Transactional może nie tworzyć transakcji?
sobes.tech AI
Odpowiedź od AI
Metoda z adnotacją @Transactional może nie tworzyć transakcji z kilku powodów:
- Jeśli metoda jest wywoływana bezpośrednio w tej samej klasie (bez proxy), Spring nie zastosuje transakcji, ponieważ transakcje działają przez proxy.
- Jeśli konfiguracja Spring nie obejmuje obsługi transakcji lub adnotacja nie jest rozpoznawana.
- Jeśli metoda jest oznaczona jako
privatelubfinal, proxy nie może jej nadpisać, aby utworzyć transakcję. - Jeśli już istnieje aktywna transakcja i obecna metoda jest skonfigurowana z propagation, które nie tworzy nowej transakcji.
Przykład problemu z wywołaniem wewnątrz klasy:
@Service
public class MyService {
@Transactional
public void transactionalMethod() {
// kod
}
public void caller() {
transactionalMethod(); // transakcja nie zostanie utworzona, jeśli wywołanie jest w tej samej klasie
}
}