[ http://issues.apache.org/jira/browse/JDO-392?page=all ]
Craig Russell updated JDO-392: ------------------------------ Fix Version/s: JDO 2 maintenance release 1 Need to resolve these issues for maintenance release 1. > Deletion of objects when foreign-key is present : unexpected DB exceptions > not handled > -------------------------------------------------------------------------------------- > > Key: JDO-392 > URL: http://issues.apache.org/jira/browse/JDO-392 > Project: JDO > Issue Type: Bug > Components: tck20 > Affects Versions: JDO 2 final > Reporter: Andy Jefferson > Fix For: JDO 2 maintenance release 1 > > > When I change JPOX to check for foreign-key constraints and when deleting an > object with a FK present to just leave it to the DB to decide what to do > (based on the specified FK) the DB throws exceptions. Such as > [java] 1) > test(org.apache.jdo.tck.extents.CloseAll)javax.jdo.JDODataStoreException: > Delete request failed: DELETE FROM datastoreidentity0.PERSONS WHERE > DATASTORE_IDENTITY=? > [java] at > org.jpox.store.rdbms.request.DeleteRequest.execute(DeleteRequest.java:274) > [java] at > org.jpox.store.rdbms.table.ClassTable.delete(ClassTable.java:2495) > [java] at org.jpox.store.StoreManager.delete(StoreManager.java:902) > [java] at > org.jpox.state.StateManagerImpl.internalDeletePersistent(StateManagerImpl.java:4206) > [java] at > org.jpox.state.StateManagerImpl.deletePersistent(StateManagerImpl.java:4161) > [java] at > org.jpox.AbstractPersistenceManager.internalDeletePersistent(AbstractPersistenceManager.java:1393) > [java] at > org.jpox.AbstractPersistenceManager.deletePersistent(AbstractPersistenceManager.java:1404) > [java] at > org.apache.jdo.tck.extents.ExtentTest.deleteEmployee(ExtentTest.java:200) > [java] at org.apache.jdo.tck.extents.CloseAll.test(CloseAll.java:61) > [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:237) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:107) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:147) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:122) > [java] NestedThrowablesStackTrace: > [java] ERROR 23503: DELETE on table 'PERSONS' caused a violation of > foreign key constraint 'PERS_MANAGER_FK' for key (885). 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.ReferencedKeyRIChecker.doCheck(Unknown > Source) > [java] at > org.apache.derby.impl.sql.execute.RISetChecker.doPKCheck(Unknown Source) > [java] at > org.apache.derby.impl.sql.execute.DeleteResultSet.runFkChecker(Unknown Source) > [java] at > org.apache.derby.impl.sql.execute.DeleteResultSet.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.execute(Unknown Source) > [java] at > com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:911) > [java] at > org.jpox.store.rdbms.ParamLoggingPreparedStatement.execute(ParamLoggingPreparedStatement.java:213) > [java] at > org.jpox.store.rdbms.request.Request.executeUpdate(Request.java:88) > [java] at > org.jpox.store.rdbms.request.DeleteRequest.execute(DeleteRequest.java:260) > [java] at > org.jpox.store.rdbms.table.ClassTable.delete(ClassTable.java:2495) > [java] at org.jpox.store.StoreManager.delete(StoreManager.java:902) > [java] at > org.jpox.state.StateManagerImpl.internalDeletePersistent(StateManagerImpl.java:4206) > [java] at > org.jpox.state.StateManagerImpl.deletePersistent(StateManagerImpl.java:4161) > [java] at > org.jpox.AbstractPersistenceManager.internalDeletePersistent(AbstractPersistenceManager.java:1393) > [java] at > org.jpox.AbstractPersistenceManager.deletePersistent(AbstractPersistenceManager.java:1404) > [java] at > org.apache.jdo.tck.extents.ExtentTest.deleteEmployee(ExtentTest.java:200) > [java] at org.apache.jdo.tck.extents.CloseAll.test(CloseAll.java:61) > [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:237) > The deletion of objects should be handled by the TCK or better defined. > Alternatively the JDO2 spec should define what a JDO impl ought to do when > deletePersistent is called and the object has references to other objects via > FKs. JPOX has been nulling these out until now ... so the TCK ran ok. Now > that we want to rely on the DB FKs we find this issue so would like to know > what is "expected behaviour" -- 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