7
votes

Verrouillage optimiste et org.hibernate.staleObjectStateException:

Je suis juste en train d'expérimenter avec un verrouillage optimiste.

J'ai la classe suivante: p> xxx pré>

J'en récupérise l'un des étudiants et j'essaie de mettre à jour son Propriétés simultanément. P> xxx pré>

et à l'intérieur de myRunnable: p> xxx pré>

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]


0 commentaires

3 Réponses :


0
votes

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)


0 commentaires

11
votes

Je donne un essai de répondre à vos questions:

  1. Vous utilisez un verrouillage optimiste. Donc, vous voulez qu'un optimisticlockebexception 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 est qu'un conflit de version ne se produise pas très souvent)

  2. Si un optimistiqueLockException se produit, vous avez essentiellement 2 options:

    1. Jeter les modifications (et peut-être rafraîchir l'état actuel)
    2. Actualisez simplement la version de votre entité (entités) et essayez de vous engager à nouveau

      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.


0 commentaires

-1
votes

J'ai eu la même exception. Il a été résolu une fois que j'ai changé xxx

à xxx

dans mon entité.

mon application s'exécute sur MySQL Server .


0 commentaires