Junior — Middle
Co się stanie, gdy wywołasz metodę z adnotacją @Transactional wewnątrz metody, która nie jest oznaczona tą adnotacją w Spring?
sobes.tech AI
Odpowiedź od AI
Jeśli metoda z adnotacją @Transactional jest wywoływana z innej metody tej samej klasy, która nie jest oznaczona @Transactional, transakcja nie zostanie utworzona. Wynika to z faktu, że Spring tworzy proxy do zarządzania transakcjami, a wywołania metod wewnątrz tej samej klasy nie przechodzą przez proxy, co oznacza, że adnotacja nie działa.
Aby transakcja zadziałała, wywołanie metody z @Transactional musi pochodzić z zewnątrz przez proxy, na przykład z innego beana. W przeciwnym razie kod wewnątrz metody z @Transactional będzie wykonywał się bez kontekstu transakcyjnego.
Przykład:
@Service
public class MyService {
public void outerMethod() {
// Wywołanie metody wewnętrznej nie utworzy transakcji
innerTransactionalMethod();
}
@Transactional
public void innerTransactionalMethod() {
// Tutaj transakcja nie będzie aktywna, jeśli wywołana z outerMethod
}
}