Es ist eine Weile her, seit ich diese Frage geschrieben habe, aber ich habe es herausgefunden. Ich werde erklären, was ich getan habe, damit es für jemand anderen hilfreich ist.
Die Annotation @Version
ist eine javax.persistence-Schnittstelle und nicht das Spring-Data-Rest-jpa-Framework, wie ich bereits erwähnt habe.
Wenn Sie von @Version machen wollen, müssen Sie ein Versionsfeld in Ihrem Domain-Objekt erstellen, etwa so:
@Version
@Column(name = "VERSION")
private long version;
Wenn Sie es mit Hibernate automatisch pickup die Anmerkung und es wird erstellen eine Zeile "Version" in Ihrer (in meinem Fall MySql) Tabelle. Jedes Mal, wenn ein Datensatz aktualisiert wird, erhöht der Ruhezustand den Zähler um 1.
Nun, warum ist das etwas, was Sie wollen? Nun, der Grund, warum Sie dies verwenden möchten, ist, weil es die Wahrscheinlichkeit verringert, dass Ihre Kunden mit stale data arbeiten. Wenn ein Client Informationen von Ihnen abruft, wird eine Version mit den von ihm angeforderten Daten bereitgestellt. z.B.
{ <-- School entity -->
"id": 1,
"version": 0,
"name": "De regenboog",
"street": "Plantaanstraat",
"number": "2",
"zipCode": "1234AS",
"city": "Amsterdam"
}
Wenn nun ein Kunde will einige Informationen über diesen bestimmten Datensatz ändern, sendet er die neuen Informationen zusammen mit dem Versionswert. In diesem Fall ändern wir den Namen der Schule.
{ <-- School entity -->
"id": 1,
"version": 0,
"name": "Stackoverflow",
"street": "Plantaanstraat",
"number": "2",
"zipCode": "1234AS",
"city": "Amsterdam"
}
Hibernate erstellt eine Abfrage mit Ihren Informationen und fügt eine zusätzliche Where-Klausel hinzu, um die Version zu überprüfen. update .... where id = 1 and version = 0
. Jetzt, wenn die Zeile aktualisiert wird, bedeutet dies, dass Sie die richtige Version zur Verfügung gestellt haben und niemand anderes diese spezifischen Informationen zwischen dem Zeitpunkt geändert hat, an dem Sie die Informationen angefordert, geändert und zurückgeschickt haben. Schön, oder?
Was nun, wenn die Zeile nicht aktualisiert wird? Es bedeutet, dass jemand anderes diese Zeile aktualisiert hat, während Sie eine kurze Pause gemacht haben, nachdem Sie die Informationen angefordert haben. Es bedeutet, dass Ihre Version veraltet ist! Was jetzt passieren muss, ist wirklich anwendungsfallspezifisch, so dass ich nicht näher darauf eingehen werde :)
Hoffe, dass jemand diese Information nutzen kann!
Dank all
Das macht Sinn.Es hat definitiv geholfen.Vielen Dank – kalz