Je suis juste en train d'expérimenter avec un verrouillage optimiste.
J'ai la classe suivante: p> J'en récupérise l'un des étudiants et j'essaie de mettre à jour son Propriétés simultanément. P> et à l'intérieur de myRunnable: p> Qu'est-ce qui se passe que la première transaction met à jour l'objet avec succès et deuxième transaction Jouette: P> org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.vanilla.entity.Student#1]
3 Réponses :
Disclaimer: C'est une suggestion; Je ne l'ai pas essayé moi-même.
J'abandonnerais entièrement le champ de la version, et définir cette stratégie de verrouillage optimiste d'entité sur "Aucun" dans le mappage XML: P>
@Entity(optimisticLock=OptimisticLockType.NONE)
Je donne un essai de répondre à vos questions: p>
Vous utilisez un verrouillage optimiste. Donc, vous voulez qu'un Si un Le problème est de savoir comment ou qui doit décider quel état est le "correct" réel (Dernier "dernier) si vous avez des mises à jour simultanées. Tant que la cohérence est garantie, je m'en fous. P> li>
ol> optimisticlockebexception code> soit lancé sur le conflit de la version - mais vous pouvez l'attraper et ne rien faire. Vous ne pouvez pas l'éteindre pendant une seconde (tout ce que cela signifie) la transaction parce que vous ne savez pas si un conflit de version se produira (c'est l'essence de la stratégie de verrouillage optimiste: l'hypothèse optimiste em> est qu'un conflit de version ne se produise pas très souvent) p> li>
optimistiqueLockException code> se produit, vous avez essentiellement 2 options: p>
J'ai eu la même exception. Il a été résolu une fois que j'ai changé à p> dans mon entité. P> mon application s'exécute sur MySQL Server . p> p>