2012-03-17 2 views
0

Dans mon projet EJB déployé sur ÉTAIT 6.1, je reçois cette exception quand je tente d'appeler EntityManamger.merge (obj):EntityManager fusion lancer EntityExists exception

Exception data: <openjpa-1.0.4-SNAPSHOT-r420667:955062 nonfatal store error> org.apache.openjpa.persistence.EntityExistsException: Attempt to persist detached object "[email protected]". If this is a new instance, make sure any versino and/or auto-generated primary key fields are null/default when persisting. 
FailedObject: [email protected]aa 
    at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2368) 
    at org.apache.openjpa.kernel.AttachStrategy.persist(AttachStrategy.java:94) 
    at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:95) 
    at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241) 
    at org.apache.openjpa.kernel.AttachStrategy.attachCollection(AttachStrategy.java:333) 
    at org.apache.openjpa.kernel.AttachStrategy.replaceCollection(AttachStrategy.java:301) 
    at org.apache.openjpa.kernel.AttachStrategy.attachField(AttachStrategy.java:220) 
    at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:157) 
    at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241) 
    at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:101) 
    at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3161) 
    at org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1142) 
    at org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:665) 
    at com.ibm.ws.jpa.management.JPAExEmInvocation.merge(JPAExEmInvocation.java:335) 
    at com.ibm.ws.jpa.management.JPAEntityManager.merge(JPAEntityManager.java:123) 

Je n'ai pas la source de JPAEntityManager.java; mais je pensais que l'entité EntityExistsException ne pouvait pas être levée par l'opération merge() car la fusion effectue d'abord une vérification pour voir si l'entité existe. Sinon, insérez-le. Si oui, mettez-le à jour. Qu'est-ce qui ne va pas ici?

+0

Vous avez raison que la méthode de fusion ne déclare pas EntityExistsException. Je suspecte quelque chose de mal se passe avec le runtime OpenJPA et il détecte incorrectement que l'entité que vous essayez de fusionner est nouvelle, plutôt qu'une mise à jour. Pouvez-vous publier des extraits de vos attributs Id et Version? En outre, une description un peu meilleure du scénario serait bien. ie: D'où vient l'Entité dont vous fusionnez? – Rick

+0

Merci pour votre réponse. Je vais essayer d'en poster plus. – Victor

Répondre

0

Veuillez vérifier comment votre entité gestionnaire vérifie l'existence d'une entité. Utilise-t-il Cache? ou utilise-t-il une requête DB? Ce problème se produit généralement si la vérification d'existence est effectuée via le cache.

si vous utilisez JPA EclipseLink, cette configuration est maintenue dans orm.xml

Merci, Anand

Questions connexes