È passato un po 'di tempo da quando ho postato questa domanda, ma l'ho capito. Spiegherò cosa ho fatto in modo che possa essere utile a qualcun altro.
L'annotazione @Version
è un'interfaccia javax.persistence e non il framework jpa di spring-data rest come menzionato in precedenza.
Se si vuole fare uso di @Version è necessario creare un campo di versione nell'oggetto dominio in questo modo:
@Version
@Column(name = "VERSION")
private long version;
Se stai usando hibernate lo farà automaticamente pick-up l'annotazione e creerà una riga "versione" nella tabella (nel mio caso MySql). Ogni volta che un record viene aggiornato, l'ibernazione incrementerà il contatore con 1.
Ora, perché questo è ciò che vuoi? Beh, la ragione per cui potresti voler usare questo è perché diminuisce le possibilità che i tuoi clienti stiano lavorando con stale data. Ogni volta che un cliente recupera informazioni da te viene fornita una versione con i dati richiesti. per esempio.
{ <-- School entity -->
"id": 1,
"version": 0,
"name": "De regenboog",
"street": "Plantaanstraat",
"number": "2",
"zipCode": "1234AS",
"city": "Amsterdam"
}
Ora, se un cliente vuole cambiare alcune informazioni su questo record specifico invia le nuove informazioni insieme al valore di versione. In questo caso cambiamo il nome della scuola.
{ <-- School entity -->
"id": 1,
"version": 0,
"name": "Stackoverflow",
"street": "Plantaanstraat",
"number": "2",
"zipCode": "1234AS",
"city": "Amsterdam"
}
Hibernate genera una query con le informazioni dell'utente e aggiunge una clausola aggiuntiva "where" per verificare la versione. update .... where id = 1 and version = 0
. Ora se la riga è aggiornata significa che hai fornito la versione giusta e nessun altro ha modificato le informazioni specifiche tra il momento in cui hai richiesto le informazioni, l'hai cambiato e l'hai restituito. Bello vero?
Ora cosa succede se la riga non viene aggiornata? Significa che qualcun altro ha aggiornato quella riga mentre facevi una breve pausa per il bagno dopo aver richiesto le informazioni. Significa che la tua versione è obsoleta! Quello che deve accadere ora è davvero un caso specifico, quindi non entrerò nei dettagli a riguardo :)
Spero che qualcuno possa usare questa informazione!
Grazie a tutti
Ciò ha senso. Mi ha sicuramente aiutato. Grazie – kalz