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.