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
privateoffinal, 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
}
}