Wenn jemand erklären kann, was diese Anmerkung bewirkt und wann genau wir sie verwenden:
@Transactional(propagation=Propagation.REQUIRED)
Vielen Dank
java
spring
annotations
Adil
quelle
quelle
Antworten:
Wenn die Propagierungseinstellung PROPAGATION_REQUIRED ist, wird für jede Methode, auf die die Einstellung angewendet wird, ein logischer Transaktionsbereich erstellt. Jeder dieser logischen Transaktionsbereiche kann den Rollback-Status einzeln bestimmen, wobei ein äußerer Transaktionsbereich logisch unabhängig vom inneren Transaktionsbereich ist. Im Falle eines Standardverhaltens von PROPAGATION_REQUIRED werden natürlich alle diese Bereiche derselben physischen Transaktion zugeordnet. Ein im inneren Transaktionsbereich festgelegter Nur-Rollback-Marker wirkt sich also auf die Chance der äußeren Transaktion aus, tatsächlich ein Commit durchzuführen (wie Sie es erwarten würden).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
quelle
Wenn Sie eine Erklärung für Laien benötigen, die über die in den Spring Docs angegebenen hinausgeht
Betrachten Sie diesen Code ...
Wenn doSomething () aufgerufen wird, weiß es, dass es vor der Ausführung eine Transaktion in der Datenbank starten muss. Wenn der Aufrufer dieser Methode bereits eine Transaktion gestartet hat, verwendet diese Methode dieselbe physische Transaktion für die aktuelle Datenbankverbindung.
Diese
@Transactional
Anmerkung bietet eine Möglichkeit, Ihrem Code bei der Ausführung mitzuteilen, dass eine Transaktion erforderlich ist. Es wird nicht ohne ausgeführt, daher können Sie in Ihrem Code davon ausgehen, dass Sie keine unvollständigen Daten in Ihrer Datenbank haben oder im Falle einer Ausnahme etwas bereinigen müssen.Das Transaktionsmanagement ist ein ziemlich kompliziertes Thema, daher ist diese vereinfachte Antwort hoffentlich hilfreich
quelle
@Transactional
Ihrer Serviceschicht hinzugefügt haben , müssen Sie nicht mehr@Transactional
zu den DAO-Methoden hinzufügen , die innerhalb dieser Transaktion aufgerufen werden.doSomething()
eine andere verschachtelte Methode ohne @transactional aufgerufen wird, gilt dieselbe Transaktion auch für diese aufrufende Methode?Wenn Sie in Spring-Anwendungen die annotationsbasierte Transaktionsunterstützung aktivieren
<tx:annotation-driven/>
und eine Klasse / Methode mit @Transactional (propagation = Propagation.REQUIRED) kommentieren und annotieren, startet das Spring-Framework eine Transaktion und führt die Methode aus und schreibt die Transaktion fest. Wenn eine RuntimeException aufgetreten ist, wird die Transaktion zurückgesetzt.Tatsächlich ist Propagation = Propagation.REQUIRED die Standardausbreitungsstufe, die Sie nicht explizit erwähnen müssen.
Für weitere Informationen: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations
quelle
Die verschiedenen Transaktions Einstellungen und Verhaltensweisen für Transaktionsmanagement, wie angenommen , zu verstehen
REQUIRED
,ISOLATION
usw. Sie werden verstehen , müssen die Grundlagen des Transaktionsmanagements selbst.Weitere Informationen finden Sie unter Transaktionsmanagement .
quelle