Senior
Proč metoda s @Transactional nemusí vytvořit transakci?
sobes.tech AI
Odpověď od AI
Metoda označená anotací @Transactional nemusí vytvořit transakci z několika důvodů:
- Pokud je metoda volána přímo uvnitř stejné třídy (bez proxy), Spring transakci nepoužije, protože transakce fungují přes proxy.
- Pokud konfigurace Spring neobsahuje podporu transakcí nebo anotace není rozpoznána.
- Pokud je metoda označena jako
privatenebofinal, proxy ji nemůže přepsat pro vytvoření transakce. - Pokud již existuje aktivní transakce a aktuální metoda je nakonfigurována s propagation, které nevytváří novou transakci.
Příklad problému s voláním uvnitř třídy:
@Service
public class MyService {
@Transactional
public void transactionalMethod() {
// kód
}
public void caller() {
transactionalMethod(); // transakce nebude vytvořena, pokud je volání uvnitř stejné třídy
}
}