[ http://issues.apache.org/jira/browse/JDO-143?page=comments#action_12330440 ]
Craig Russell commented on JDO-143: ----------------------------------- Hi Andy, Thanks for this analysis, Andy. This situation is not covered by the specification. So it's a test bug. Even if it were covered by the specification, I'd expect it to say that an exception should be thrown. The test case should not assign the same instance to both an embedded field and a non-embedded field. So the bug should be reassigned to Michelle. And we should look at all of the other collection test cases to make sure that this same situation isn't in the other tests. The spec does say it's ok to assign the same embedded instance to multiple fields, but as far as I know there's no test case for this. You might consider adding a JPOX check to make sure that when persisting a PC instance that is known to be embedded, then only embedded uses are permitted. Similarly, persisting a PC instance that is known to be non-embedded, then only non-embedded uses are permitted. Its the case of a PC instance being used as both embedded and non-embedded that's problematic, and if possible it would be nice to throw a different exception. > 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/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
