[ 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

        

Reply via email to