Come funziona l' @Version
annotazione in JPA?
Ho trovato varie risposte il cui estratto è il seguente:
JPA utilizza un campo versione nelle entità per rilevare modifiche simultanee allo stesso record dell'archivio dati. Quando il runtime JPA rileva un tentativo di modificare contemporaneamente lo stesso record, genera un'eccezione alla transazione che tenta di eseguire il commit per ultimo.
Ma non sono ancora sicuro di come funzioni.
Anche dalle seguenti righe:
Dovresti considerare i campi della versione immutabili. La modifica del valore del campo ha risultati indefiniti.
Significa che dovremmo dichiarare il nostro campo versione come final
?
UPDATE myentity SET mycolumn = 'new value', version = version + 1 WHERE version = [old.version]
. Se qualcuno ha aggiornato il record,old.version
non corrisponderà più a quello nel DB e la clausola where impedirà l'aggiornamento. Le "righe aggiornate" saranno0
, che JPA può rilevare per concludere che si è verificata una modifica simultanea.