Frage

Ich habe eine einzige Service-Methode mit Propagation.Required kommentiert. Es führt drei getrennte Vorgänge.

  1. Einfügen Tabelle 1 aus der Tabelle z, wenn keine Datensätze in der Tabelle befinden sich derzeit 1
  2. Insert / Update Tabelle 1 als pro Benutzer Änderungen / Ergänzungen
  3. Löschen x Datensätze aus Tabelle 1

Verzeihen Sie meine Unwissenheit, aber sollte nicht diese alle laufen unter einer einzigen Transaktion? Im Sinne läuft, wenn die dritte Abfrage in eine Ausnahme, sollte nicht zu den ersten und zweiten Rollback? Dies gilt nicht in meinem Fall geschehen. Wird überwintern automatische Einstellung der TXN Grenzen in irgendeiner Weise beeinflussen begehen? Auto verpflichtet wahr in meinem Fall gesetzt. Was ich suche ist das Commit sollte in jeder dieser Tabellen nur dann, wenn alle erfolgreich sind.

War es hilfreich?

Lösung

Ja, die Hibernate connection.autocommit Eigenschaftseinstellung Transaktionsgrenzen auswirken wird.

Wenn Sie dies true gesetzt, Hibernate wird die zugrunde liegende JDBC-Verbindung in Autocommitmodus setzen, die jede Aussage, die Sie in einer eigenen Datenbank-Transaktion ausgeführt werden wickeln.

So zum Beispiel, wenn Ihre dritte Abfrage / Anweisung schlägt fehl, nur Ihre dritte Abfrage / Anweisung zurück gerollt.

Um alle drei als eine einzige Einheit auszuführen, müssen Sie autocommit ausgeschaltet haben und alle drei im Rahmen einer einzigen Transaktion ausführen, deklarative oder auf andere Weise.

Andere Tipps

Sie könnten versuchen, eine weitere Schicht höher als Service-Schicht hinzuzufügen und Transaktion von dort aus starten.

Sie definitiv nicht wollen, autocommit auf. Das wird wohl nach jeder Operation begehen. Schalter Autocommit aus, und fügen Sie eine explizite am Ende begehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top