Wie funktioniert @Version
Annotation in JPA?
Ich habe verschiedene Antworten gefunden, deren Auszug wie folgt lautet:
JPA verwendet ein Versionsfeld in Ihren Entitäten, um gleichzeitige Änderungen am gleichen Datenspeicherdatensatz zu erkennen. Wenn die JPA-Laufzeit einen Versuch erkennt, denselben Datensatz gleichzeitig zu ändern, wird eine Ausnahme für die Transaktion ausgelöst, die versucht, zuletzt einen Commit durchzuführen.
Aber ich bin mir immer noch nicht sicher, wie es funktioniert.
Auch ab folgenden Zeilen:
Sie sollten Versionsfelder als unveränderlich betrachten. Das Ändern des Feldwerts hat undefinierte Ergebnisse.
Bedeutet das, dass wir unser Versionsfeld als deklarieren sollten final
?
UPDATE myentity SET mycolumn = 'new value', version = version + 1 WHERE version = [old.version]
. Wenn jemand den Datensatz aktualisiert hat,old.version
stimmt er nicht mehr mit dem in der Datenbank überein, und die where-Klausel verhindert, dass das Update durchgeführt wird. Die 'aktualisierten Zeilen' werden von0
JPA erkannt, um zu schließen, dass eine gleichzeitige Änderung stattgefunden hat.