Sobes.tech
Junior — Middle

Wie verhält sich das System, wenn innerhalb einer als transaktional gekennzeichneten Methode eine andere Methode aufgerufen wird, die ebenfalls mit der transaktionalen Annotation versehen ist?

sobes.tech KI

Antwort von AI

In Java, bei der Verwendung von Transaktionen (z.B. mit der Annotation @Transactional in Spring), hängt das Verhalten, wenn innerhalb einer transaktionalen Methode eine andere ebenfalls als transaktional markierte Methode aufgerufen wird, vom Proxy-Typ und den Transaktionseinstellungen ab.

Standardmäßig, wenn der Aufruf innerhalb derselben Klasse erfolgt (interner Methodenaufruf), interceptiert der Proxy diesen Aufruf nicht, und es wird keine neue Transaktion erstellt — die aktuelle Transaktion (falls vorhanden) wird verwendet.

Wenn der Aufruf von außerhalb erfolgt (über den Proxy), dann:

  • Bei REQUIRED Propagation (Standard) wird keine interne Transaktion erstellt, die bestehende wird verwendet.
  • Bei REQUIRES_NEW wird eine neue Transaktion erstellt, die die aktuelle aussetzt.

Daher wird beim Aufruf einer transaktionalen Methode aus einer anderen transaktionalen Methode in derselben Klasse in der Regel die gleiche Transaktion verwendet, und die verschachtelte Annotation erstellt keine neue Transaktion.

Wenn die interne Methode in einer separaten Transaktion laufen soll, muss der Aufruf über den Proxy erfolgen (z.B. durch einen anderen Bean oder durch Selbst-Injektion).