EntityManager, генерирующий исключение EntityExists - PullRequest
0 голосов
/ 17 марта 2012

В моем EJB-проекте, развернутом на WAS 6.1, когда я пытаюсь вызвать EntityManamger.merge (obj), я получаю следующее исключение:

Exception data: <openjpa-1.0.4-SNAPSHOT-r420667:955062 nonfatal store error> org.apache.openjpa.persistence.EntityExistsException: Attempt to persist detached object "com.data.entity.SomeEntity@23aa23aa".  If this is a new instance, make sure any versino and/or auto-generated primary key fields are null/default when persisting.
FailedObject: com.bmo.ctp.data.entity.attribute.RoleResServiceAttribute@23aa23aa
    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)

У меня нет источника для JPAEntityManager.java; но я думал, что EntityExistsException не может быть вызвано операцией merge(), так как слияние сначала выполнит проверку, чтобы увидеть, существует ли сущность. Если нет, вставьте его. Если да, обновите его. Что здесь не так?

1 Ответ

0 голосов
/ 03 апреля 2012

Пожалуйста, проверьте, как ваш менеджер сущностей проверяет существование сущности. Это использует кэш? или это с помощью запроса к БД. Эта проблема обычно возникает, если проверка существования выполняется через кеш.

если вы используете eclipselink JPA, эта конфигурация сохраняется в orm.xml

Спасибо, Ананд

...