I have a situation where I've got 2 different entitymanagers from 2 different
entity manager factories running the same exact code from 2 different
threads.  The code in each thread looks for presence of the primary key and
if if can't find it it will ultimately insert it with a null and hence the
pk with be generated via a @javax.persistence.GeneratedValue(strategy =
javax.persistence.GenerationType.TABLE)

I'm getting following exception where I'd think it would detect this issue
and insert a different value instead. Is there a flag or something that I
have to enable to get the correct behaviour?


<openjpa-2.2.0-r422266:1244990 fatal store error>
org.apache.openjpa.persistence.RollbackException: Duplicate entry '0' for
key 'PRIMARY' {prepstmnt 499105288 INSERT INTO OPENJPA_SEQUENCE_TABLE (ID,
SEQUENCE_VALUE) VALUES (?, ?) [params=(int) 0, (int) 1]} [code=1062,
state=23000]
        at
org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:594)
        at
com.cambridgesemantics.anzo.relationalreplicator.ReplicationJob.commitTransaction(ReplicationJob.java:408)
        at
com.cambridgesemantics.anzo.relationalreplicator.ReplicationJob.closeActiveEntityManagers(ReplicationJob.java:528)
        at
com.cambridgesemantics.anzo.relationalreplicator.LinkedDatasetPersist.persistDataset(LinkedDatasetPersist.java:223)
        at
com.cambridgesemantics.anzo.relationalreplicator.LinkedDatasetPersist.persistDataset(LinkedDatasetPersist.java:165)
        at
com.cambridgesemantics.anzo.relationalreplicator.LinkedDatasetPersist.persistJob(LinkedDatasetPersist.java:160)
        at
com.cambridgesemantics.anzo.relationalreplicator.ReplicationJob.call(ReplicationJob.java:1054)
        at
com.cambridgesemantics.anzo.relationalreplicator.ReplicationJob.call(ReplicationJob.java:1)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)
Caused by: <openjpa-2.2.0-r422266:1244990 fatal store error>
org.apache.openjpa.persistence.EntityExistsException: Duplicate entry '0'
for key 'PRIMARY' {prepstmnt 499105288 INSERT INTO OPENJPA_SEQUENCE_TABLE
(ID, SEQUENCE_VALUE) VALUES (?, ?) [params=(int) 0, (int) 1]} [code=1062,
state=23000]
        at 
org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4903)
        at
org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4878)
        at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:136)
        at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:110)
        at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:62)
        at
org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:66)
        at org.apache.openjpa.util.ImplHelper.generateValue(ImplHelper.java:160)
        at
org.apache.openjpa.util.ImplHelper.generateFieldValue(ImplHelper.java:144)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignField(JDBCStoreManager.java:756)
        at 
org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:493)
        at 
org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:469)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:740)
        at
org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:135)
        at
org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:135)
        at
org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:612)
        at
org.apache.openjpa.kernel.StateManagerImpl.assignField(StateManagerImpl.java:703)
        at
org.apache.openjpa.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1615)
        at
org.apache.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:1598)
        at
com.cambridgesemantics.anzo.relationalreplicator.jpa.model.AnzoURIToPKImpl.getPk(AnzoURIToPKImpl.java)
        at
com.cambridgesemantics.anzo.relationalreplicator.ontologies1.casting.PerformanceWorkLoadCacheWrapper.pcgetPk(com.cambridgesemantics.anzo.relationalreplicator.ontologies1.casting.PerformanceWorkLoadCacheWrapper:120)
        at
com.cambridgesemantics.anzo.relationalreplicator.ontologies1.casting.PerformanceWorkLoadCacheWrapper.pcCopyField(com.cambridgesemantics.anzo.relationalreplicator.ontologies1.casting.PerformanceWorkLoadCacheWrapper)
        at
com.cambridgesemantics.anzo.relationalreplicator.ontologies1.casting.PerformanceWorkLoadCacheWrapper.pcCopyFields(com.cambridgesemantics.anzo.relationalreplicator.ontologies1.casting.PerformanceWorkLoadCacheWrapper)
        at
org.apache.openjpa.kernel.SaveFieldManager.saveField(SaveFieldManager.java:147)
        at
org.apache.openjpa.kernel.StateManagerImpl.saveField(StateManagerImpl.java:2847)
        at
org.apache.openjpa.kernel.StateManagerImpl.dirty(StateManagerImpl.java:1734)
        at
org.apache.openjpa.kernel.StateManagerImpl.dirty(StateManagerImpl.java:1631)
        at
org.apache.openjpa.persistence.EntityManagerImpl.dirty(EntityManagerImpl.java:1320)
        at
com.cambridgesemantics.anzo.relationalreplicator.openjpa.OpenJPAHelper.markFieldsAsDirty(OpenJPAHelper.java:110)
        at
com.cambridgesemantics.anzo.relationalreplicator.LinkedDatasetPersist.getInternalCacheWrapper(LinkedDatasetPersist.java:388)
        at
com.cambridgesemantics.anzo.relationalreplicator.LinkedDatasetPersist.getPersistedCacheWrapper(LinkedDatasetPersist.java:330)
        at
com.cambridgesemantics.anzo.relationalreplicator.LinkedDatasetPersist.persistBean(LinkedDatasetPersist.java:293)
        at
com.cambridgesemantics.anzo.relationalreplicator.LinkedDatasetPersist.persistBean(LinkedDatasetPersist.java:268)
        at
com.cambridgesemantics.anzo.relationalreplicator.LinkedDatasetPersist.persistDataset(LinkedDatasetPersist.java:211)
        ... 9 more
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Duplicate
entry '0' for key 'PRIMARY' {prepstmnt 499105288 INSERT INTO
OPENJPA_SEQUENCE_TABLE (ID, SEQUENCE_VALUE) VALUES (?, ?) [params=(int) 0,
(int) 1]} [code=1062, state=23000]
        at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:247)
        at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:223)
        at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$1000(LoggingConnectionDecorator.java:72)
        at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:1162)
        at
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:272)
        at
org.apache.openjpa.jdbc.kernel.TableJDBCSeq.executeUpdate(TableJDBCSeq.java:817)
        at
org.apache.openjpa.jdbc.kernel.TableJDBCSeq.insertSequence(TableJDBCSeq.java:502)
        at
org.apache.openjpa.jdbc.kernel.TableJDBCSeq.access$100(TableJDBCSeq.java:74)
        at
org.apache.openjpa.jdbc.kernel.TableJDBCSeq$AllocateSequenceRunnable.run(TableJDBCSeq.java:903)
        at
org.apache.openjpa.jdbc.kernel.TableJDBCSeq.allocateSequence(TableJDBCSeq.java:455)
        at
org.apache.openjpa.jdbc.kernel.TableJDBCSeq.nextInternal(TableJDBCSeq.java:300)
        at
org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:60)
        ... 36 more




--
View this message in context: 
http://openjpa.208410.n2.nabble.com/Duplicate-entry-issue-with-multithreaded-application-tp7580917.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Reply via email to