### Eclipse Workspace Patch 1.0 #P castor Index: src/doc/release-notes.xml =================================================================== --- src/doc/release-notes.xml (revision 8185) +++ src/doc/release-notes.xml (working copy) @@ -46,6 +46,26 @@ org.castor.cpa.persistence.sql.connection.proxies=false + + + Shift deletion of records of extended objects from SQLStatementRemove to ClassMolder + + + Ralf Joachim + ralf.joachim@syscon.eu + + + Ahmad Hassan + ahmad.hassan@gmail.com + + + Ahmad Hassan + ahmad.hassan@gmail.com + + Enh. + JDO + 20090510 + Pass ID's array to constructor of SQLStatementRemove. Index: cpa/src/main/java/org/exolab/castor/jdo/engine/SQLStatementRemove.java =================================================================== --- cpa/src/main/java/org/exolab/castor/jdo/engine/SQLStatementRemove.java (revision 8185) +++ cpa/src/main/java/org/exolab/castor/jdo/engine/SQLStatementRemove.java (working copy) @@ -78,7 +78,6 @@ public Object executeStatement(final Connection conn, final Identity identity) throws PersistenceException { - SQLEngine extended = _engine.getExtends(); PreparedStatement stmt = null; try { @@ -104,11 +103,6 @@ throw new PersistenceException("Object to be deleted does not exist! " + identity); } - // Must delete record in parent table last. - // All other dependents have been deleted before. - if (extended != null) { - extended.delete(conn, identity); - } } catch (SQLException except) { LOG.fatal(Messages.format("jdo.deleteFatal", _type, _statement), except); throw new PersistenceException(Messages.format("persist.nested", except), except); Index: cpa/src/main/java/org/exolab/castor/persist/ClassMolder.java =================================================================== --- cpa/src/main/java/org/exolab/castor/persist/ClassMolder.java (revision 8172) +++ cpa/src/main/java/org/exolab/castor/persist/ClassMolder.java (working copy) @@ -937,14 +937,26 @@ _persistence.delete(tx.getConnection(oid.getMolder().getLockEngine()), ids); + // Must delete record in parent table last. + // All other dependents have been deleted before. + ClassMolder extended = this.getExtends(); + Connection con = tx.getConnection(oid.getMolder().getLockEngine()); + + while (extended != null) { + + extended._persistence.delete(con, ids); + extended = extended._extends; + + } + // All field along the extend path will be deleted by transaction // However, everything off the path must be deleted by ClassMolder. Vector extendPath = new Vector(); ClassMolder base = this; while (base != null) { - extendPath.add(base); - base = base._extends; + extendPath.add(base); + base = base._extends; } base = _depends; @@ -1212,7 +1224,7 @@ public ClassMolder getExtends() { return _extends; } - + /** * Get the depends class' ClassMolder. */