Ja! Ich habe die Dokumente über
gelesen
- jooq wird niemals auf der Verbindung festschreiben oder einen Rollback ausführen (außer für CSV-Importe, falls explizit in der Import-API konfiguriert)
- jOOQ wird niemals Transaktionen starten.
- ...
Aber wenn ich ein Transaktionsmanagement brauche, was ist die beste Vorgehensweise, um dies zu tun?
Habe ich gesagt, dass ich ein großer Fan von einer Art von JOOQ bin!
Diese Frage wurde zu einem Zeitpunkt gestellt, als jOOQ noch keine Transaktions-API implementiert hatte. Ab dem 01.04. Ist eine solche API verfügbar und dokumentiert:
Standardmäßig bindet jOOQ seine (verschachtelte) Transaktionsunterstützung direkt über eine einfache, funktionale API an die JDBC-API:
%Vor% ... der Lambda-Ausdruck (oder genauer gesagt der TransactionalRunnable
) ) Erstellt eine neue Transaktion an ihrem Anfang und schreibt sie bei normalem Abschluss fest oder rollt sie bei einer Ausnahme zurück.
Solche Transaktionen können geschachtelt werden
%Vor% ... in dem Fall Savepoint
wird am Anfang der verschachtelten Transaktion erstellt, und die verschachtelte Transaktion verwirft den Sicherungspunkt bei normalem Abschluss oder rollt nach einer Ausnahme auf diesen zurück.
In vielen Anwendungen haben Sie bereits ein bereits bestehendes Transaktionsverwaltungssystem, z. JTA oder Spring TX oder etwas anderes. In diesem Fall können Sie entweder:
TransactionProvider
, die die Semantik von begin()
implementiert. , commit()
und rollback()
Operationen, z indem du sie an Spring bindest. Die Transaktionssteuerung ist unabhängig von einer DB-Zugriffsebene, wie sie JOOQ bietet.
Das Starten und Beenden von Transaktionen wird wahrscheinlich am besten in der Serviceebene Ihrer Anwendung gehandhabt. Sehen Sie sich das Diagramm auf dieser Seite an, das die Beziehung der Service-Schicht zu den unteren Schichten zeigt, die sie aufruft.
Siehe auch Muster wie Arbeitseinheit oder Transaktionsskript .
Tags und Links sql java transactions jooq