You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-dev@db.apache.org by "Andy Jefferson (JIRA)" <ji...@apache.org> on 2006/07/11 09:55:29 UTC

[jira] Created: (JDO-392) Deletion of objects when foreign-key is present : unexpected DB exceptions now handled

Deletion of objects when foreign-key is present : unexpected DB exceptions now handled
--------------------------------------------------------------------------------------

         Key: JDO-392
         URL: http://issues.apache.org/jira/browse/JDO-392
     Project: JDO
        Type: Bug

  Components: tck20  
    Versions: JDO 2 final    
    Reporter: Andy Jefferson


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


[jira] Updated: (JDO-392) Deletion of objects when foreign-key is present : unexpected DB exceptions not handled

Posted by "Craig Russell (JIRA)" <ji...@apache.org>.
     [ 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

        

[jira] Resolved: (JDO-392) Deletion of objects when foreign-key is present : unexpected DB exceptions not handled

Posted by "Craig Russell (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/JDO-392?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Craig Russell resolved JDO-392.
-------------------------------

    Resolution: Fixed
      Assignee: Craig Russell

The specification has been updated for handling deletion of related instances.

> Deletion of objects when foreign-key is present : unexpected DB exceptions not handled
> --------------------------------------------------------------------------------------
>
>                 Key: JDO-392
>                 URL: https://issues.apache.org/jira/browse/JDO-392
>             Project: JDO
>          Issue Type: Bug
>          Components: tck2
>    Affects Versions: JDO 2 final
>            Reporter: Andy Jefferson
>            Assignee: Craig Russell
>             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.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (JDO-392) Deletion of objects when foreign-key is present : unexpected DB exceptions not handled

Posted by "Craig Russell (JIRA)" <ji...@apache.org>.
    [ http://issues.apache.org/jira/browse/JDO-392?page=comments#action_12420394 ] 

Craig Russell commented on JDO-392:
-----------------------------------

JDO assumes that during a transaction, the persistent instances in memory might be out of sync with the persistent instances in the datastore. The application does not need to be written so as to guarantee consistency with each individual memory operation.  

The spec is pretty specific about when instances are removed from the datastore:

<spec 12.6.7>
These methods delete persistent instances from the datastore. They must be called in the 
context of an active transaction, or a JDOUserException is thrown. The representation 
in the datastore will be deleted when this instance is flushed to the datastore (via commit 
or evict). 
...
If deleting an instance would violate datastore integrity constraints, it is implementation- 
defined whether an exception is thrown at commit time, or the delete operation is simply 
ignored. Portable applications should use this method to delete instances from the datas- 
tore, and not depend on any reachability algorithm to automatically delete instances. 
</spec 12.6.7>

I think that both of the above paragraphs need some expert group discussion. I'll raise this on the expert group alias.


> 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
>         Type: Bug

>   Components: tck20
>     Versions: JDO 2 final
>     Reporter: Andy Jefferson

>
> 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


[jira] Updated: (JDO-392) Deletion of objects when foreign-key is present : unexpected DB exceptions not handled

Posted by "Andy Jefferson (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/JDO-392?page=all ]

Andy Jefferson updated JDO-392:
-------------------------------

    Summary: Deletion of objects when foreign-key is present : unexpected DB exceptions not handled  (was: Deletion of objects when foreign-key is present : unexpected DB exceptions now handled)

> 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
>         Type: Bug

>   Components: tck20
>     Versions: JDO 2 final
>     Reporter: Andy Jefferson

>
> 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