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.