| Andy Jefferson (JIRA) 2005-09-24, 7:45 am |
| [ http://issues.apache.org/jira/brows...action_12330360 ]
Andy Jefferson commented on JDO-143:
------------------------------------
Hard to follow the TCK test in terms of the data in each of the collections so I'll post my findings here so someone who understands the data that is trying to be persisted can comment. There are 2 fields of note in the CollectionCollections class : "Coll
ectionOfSimpleClass42", and "CollectionOfSimpleClass3".
The former has embedded elements and the latter is unembedded, just having a FK to the SimpleClass table. Debugging suggests that both of these collections contains the same element(s). It's being encountered as part of the CollectionOfSimpleClass42 field
and has a StateManager assigned (as an embedded object) and is persisted (into the join table). When JPOX gets around to persisting the CollectionOfSimpleClass3 field JPOX finds the already persistent SimpleClass element and so think it's ok to insert th
e join table row - hence the FK fails.
Do these collections contain the same elements ? If so what are you expecting a JDO impl to do in this situation ? Make a copy of the PC object and persist that ? If so, please provide a reference to the section of the JDO2 spec defining such behaviour.
> ERROR 23503: INSERT on table 'COLLECTION_OF_SIMPLE_CLASS3' caused a violation of foreign key constraint
> -------------------------------------------------------------------------------------------------------
>
> Key: JDO-143
> URL: http://issues.apache.org/jira/browse/JDO-143
> Project: JDO
> Type: Bug
> Components: tck20
> Reporter: Michelle Caisse
> Assignee: Erik Bengtson
>
> [java] 1) test(org.apache.jdo.tck.models.fieldtypes.TestCollectionCollections)javax.jdo.JDODataStoreException: Add request failed : INSERT INTO applicationidentity0.COLLECTION_OF_SIMPLE_CLASS3 (IDENTIFIER,ALLOW_DUPLICATES,SIMPCLSREF)
VALUES (?,?,?)
> [java] at org.jpox.store.rdbms.scostore.NormalSetStore.add(NormalSetStore.java:672)
> [java] at org.jpox.sco.SCOUtils.updateStoreWithCollection(SCOUtils.java:489)
> [java] at org.jpox.store.mapping.container.CollectionMapping.postUpdate(CollectionMapping.java:279)
> [java] at org.jpox.store.rdbms.request.UpdateRequest.execute(UpdateRequest.java:266)
> [java] at org.jpox.store.rdbms.table.ClassTable.update(ClassTable.java:1838)
> [java] at org.jpox.store.StoreManager.update(StoreManager.java:782)
> [java] at org.jpox.state.StateManagerImpl.flush(StateManagerImpl.java:4298)
> [java] at org.jpox.state.StateManagerImpl.runReachability(StateManagerImpl.java:3102)
> [java] at org.jpox.AbstractPersistenceManager.preCommit(AbstractPersistenceManager.java:3049)
> [java] at org.jpox.NonmanagedTransaction.commit(NonmanagedTransaction.java:419)
> [java] at org.apache.jdo.tck.models.fieldtypes.TestCollectionCollections.runTest(TestCollectionCollections.java:97)
> [java] at org.apache.jdo.tck.models.fieldtypes.TestCollectionCollections.test(TestCollectionCollections.java:69)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [java] at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:204)
> [java] at org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:115)
> [java] at org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:93)
> [java] NestedThrowablesStackTrace:
> [java] ERROR 23503: INSERT on table 'COLLECTION_OF_SIMPLE_CLASS3' caused a violation of foreign key constraint SQL050921005031671' for key (1127341751473). The statement has been rolled back.
> [java] at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
> [java] at org.apache.derby.impl.sql.execute.ForeignKeyRIChecker.doCheck(Unknown Source)
> [java] at org.apache.derby.impl.sql.execute.GenericRIChecker.doCheck(Unknown Source)
> [java] at org.apache.derby.impl.sql.execute.RISetChecker.doFKCheck(Unknown Source)
> [java] at org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(Unknown Source)
> [java] at org.apache.derby.impl.sql.execute.InsertResultSet.open(Unknown Source)
> [java] at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown Source)
> [java] at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source)
> [java] at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown Source)
> [java] at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown Source)
> [java] at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
> [java] at org.jpox.store.rdbms.scostore.BaseContainerStore.executeUpdate(BaseContainerStore.java:97)
> [java] at org.jpox.store.rdbms.scostore.NormalSetStore.add(NormalSetStore.java:654)
> [java] at org.jpox.sco.SCOUtils.updateStoreWithCollection(SCOUtils.java:489)
> [java] at org.jpox.store.mapping.container.CollectionMapping.postUpdate(CollectionMapping.java:279)
> [java] at org.jpox.store.rdbms.request.UpdateRequest.execute(UpdateRequest.java:266)
> [java] at org.jpox.store.rdbms.table.ClassTable.update(ClassTable.java:1838)
> [java] at org.jpox.store.StoreManager.update(StoreManager.java:782)
> [java] at org.jpox.state.StateManagerImpl.flush(StateManagerImpl.java:4298)
> [java] at org.jpox.state.StateManagerImpl.runReachability(StateManagerImpl.java:3102)
> [java] at org.jpox.AbstractPersistenceManager.preCommit(AbstractPersistenceManager.java:3049)
> [java] at org.jpox.NonmanagedTransaction.commit(NonmanagedTransaction.java:419)
> [java] at org.apache.jdo.tck.models.fieldtypes.TestCollectionCollections.runTest(TestCollectionCollections.java:97)
> [java] at org.apache.jdo.tck.models.fieldtypes.TestCollectionCollections.test(TestCollectionCollections.java:69)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [java] at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:204)
> [java] at org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:115)
> [java] at org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:93)
> Possibly due to a misordering of inserts required for this operation?
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secur...nistrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
|