Sobes.tech
Senior

Waarom kan de methode met @Transactional geen transactie aanmaken?

sobes.tech AI

Antwoord van AI

Een methode met de annotatie @Transactional kan om verschillende redenen geen transactie aanmaken:

  • Als de methode direct binnen dezelfde klasse wordt aangeroepen (zonder proxy), past Spring de transactie niet toe, omdat transacties via proxies werken.
  • Als de Spring-configuratie geen ondersteuning voor transacties bevat of de annotatie niet wordt herkend.
  • Als de methode is gemarkeerd als private of final, kan de proxy deze niet overschrijven om een transactie te creëren.
  • Als er al een actieve transactie bestaat en de huidige methode is geconfigureerd met propagation die geen nieuwe transactie aanmaakt.

Voorbeeld van een probleem met een interne klasse-aanroep:

@Service
public class MyService {
    @Transactional
    public void transactionalMethod() {
        // code
    }

    public void caller() {
        transactionalMethod(); // geen transactie wordt aangemaakt als de aanroep binnen dezelfde klasse is
    }
}