Spring @Transactional Nur-Lese-Übertragung

Ich experimentiere damit, das Befehlsmuster zu verwenden, damit meine Webebene im Rahmen einer einzelnen Transaktion mit Ruhezustand-Entitäten arbeiten kann (wodurch verzögertes Laden von Ausnahmen vermieden wird). Ich bin jetzt jedoch verwirrt, wie ich mit Transaktionen umgehen soll.

Meine Befehle rufen Service-Layer-Methoden auf, die mit Anmerkungen versehen sind@Transactional Anmerkungen. Einige dieser Dienstschichtmethoden sind schreibgeschützt - z.@Transactional(readOnly=true) - und manche lesen / schreiben.

Meine Serviceschicht stellt einen Befehlshandler zur Verfügung, der Befehle ausführt, die im Auftrag der Webschicht an sie übergeben wurden.

@Transactional
public Command handle( Command cmd ) throws CommandException

Ich nehme an, ich bin richtig, wenn ich die Befehlshandler machehandle() Methode Transaktions. Hier kommt die Verwirrung ins Spiel. Wenn bei der Implementierung eines Befehls mehrere Service-Layer-Methoden aufgerufen werden, kann der Befehlshandler nicht wissen, ob die im Befehl aufgerufenen Operationen schreibgeschützt, schreibgeschützt oder kombiniert sind von den beiden.

Ich verstehe nicht, wie die Weitergabe in diesem Beispiel funktioniert. Wenn ich das machen würdehandle() MethodereadOnly=trueWas passiert dann, wenn der Befehl eine Service-Layer-Methode aufruft, die mit annotiert ist?@Transactional(realOnly=false)?

Ich würde mich über ein besseres Verständnis freuen und würde mich über Ihre Kommentare freuen ...

Andrew

Antworten auf die Frage(4)

Ihre Antwort auf die Frage