2010-09-16 13 views
0

La méthode find ne renvoie pas la dernière version d'un objet. quelque part dans mon code je trouve un objet, le change, le fusionne et valide mes modifications. Dans la base de données les modifications sont faites mais dans une autre fonction je trouve cet objet et mes changements ne sont pas là. J'ai vérifié les conditions de course avec le résultat qu'il n'y a pas de conditions de course. J'ai vérifié s'il existe des doublons de cet objet ou des ID différents, mais cela fonctionne bien.jpa trouver le problème

Est-ce que quelqu'un a une idée?

db: mysql persistance: EclipseLink

+0

Pouvez-vous fournir du code? des extraits de la partie où vous avez effectué votre changement et la partie où vous récupérez l'entité périmée? –

Répondre

1

Avez-vous un EntityManager déjà ouvert tandis qu'un autre EntityManager ne la fusion/commit? L'entité périmée peut provenir d'un EntityManager qui n'est pas encore synchronisé avec les modifications validées dans la base de données dans un autre EntityManager ailleurs. Essayez d'appeler la méthode flush() sur l'EntityManager qui doit être synchronisé.

+0

ahh, je vois, merci jim. – heimschmiede

+0

@heimschmiede Réponse aux commentaires –

0

jim a raison. J'ai deux EntittyManager qui ne sont pas synchronisés. Ma solution est maintenant d'avoir seulement un gestionnaire d'entité. Existe-t-il une bonne solution pour synchroniser les deux gestionnaires car j'ai deux threads et il est possible que les deux threads souhaitent commencer une transaction en même temps, ce qui pourrait être un problème ...