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?
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
Merci pour votre réponse. Je vais essayer d'en poster plus. – Victor