Ressource
Pour terminer cette section sur le versionning des entités, quand doit-on utiliser @Version ?
Quand utiliser le versionning
@Version is used to implement Optimistic locking with Hibernate, which means that no two transactions override the data at the same time with a conflict.
Exemple concret
Deux applications
Comme vu dans Stateless anti-pattern lorsque deux applications distinctes accèdent à la même base de données
Deux personnes distinctes modifient
Supposons un service client qui accède à vos données pour les mettre à jour. Si deux personnes de ce même service modifient en même temps vos données, la dernière personne à enregistrer écrasera les autres
Deux onglets du navigateur
Onglet A charge la commande -> status = OPEN
Onglet B charge la commande -> status = OPEN
Onglet A valide -> status = VALIDATED
Onglet B annule -> status = CANCELED
- ❌ La modification de l’onglet A est perdue
- ❌ Bug métier invisible (la commande a été validée, peut-être même payé et demandée à être expédiée)
=> Le raisonnement “on a une seule application, donc pas besoin de versionning” est donc faux
Conclusion
En cas d’accès concurrent, alors une exception est levée et doit être transmise à l’utilisateur en lui demandant de rafraîchir sa page par exemple
