Hello all, On version 3.0.1 i have just found out a problematic behaviour. If on the modeler we have a DB structure like this (with delete rules included):
A -> bArray (Cascade) -> B -> cArray (Deny) The first time we try to delete A the DeleteDenyException happens but the second time it doesn't because on the DataContextDeleteAction.java on the deletePersistent method the following code is executed: object.setPersistenceState(PersistenceState.DELETED); dataContext.getObjectStore().nodeRemoved(object.getObjectId()); processDeleteRules(object, oldState); which will mark an Object as deleted BEFORE testing all the object tree for Deny rules... this will fail (no exception thrown) on the second time because object A is already marked as DELETED, preventing a second test on the tree. I tried doing this processDeleteRules(object, oldState); object.setPersistenceState(PersistenceState.DELETED); dataContext.getObjectStore().nodeRemoved(object.getObjectId()); but as the class is protected to run inside the package org.apache.cayenne.access I was having a lot of work to extract it from the package and even then the exception was correctly raised but when I tried doing anything else on that context session I would also get a DeleteDenyException on places I wasn't expecting. My solution was to create a method canDelete on the CayenneDataOject that tests the current object for deletion using the same algorithm from deletePersistent but without the setters and modeRemoved method. Only the DeleteDenyExpection is thrown. I run this before the deleteObject method and so if I get to it is because I can safely delete the current object. I dont know if this issue was address on recent builds... By the way any schedule on releasing at least a beta version of cayenne 3.1? Regards Bruno Santos