Comment fonctionne l' @Version
annotation dans JPA?
J'ai trouvé diverses réponses dont l'extrait est le suivant:
JPA utilise un champ de version dans vos entités pour détecter les modifications simultanées du même enregistrement de banque de données. Lorsque l'environnement d'exécution JPA détecte une tentative de modification simultanée du même enregistrement, il lève une exception à la transaction qui tente de valider en dernier.
Mais je ne sais toujours pas comment cela fonctionne.
Aussi à partir des lignes suivantes:
Vous devez considérer les champs de version immuables. La modification de la valeur du champ a des résultats non définis.
Cela signifie-t-il que nous devrions déclarer notre champ de version comme final
?
UPDATE myentity SET mycolumn = 'new value', version = version + 1 WHERE version = [old.version]
. Si quelqu'un a mis à jour l'enregistrement,old.version
ne correspondra plus à celui de la base de données et la clause where empêchera la mise à jour de se produire. Les «lignes mises à jour» seront0
, que JPA peut détecter pour conclure qu'une modification simultanée s'est produite.