Andrus Adamchik created CAY-2779: ------------------------------------ Summary: "Nullify" delete rules is not processed with n:m and inheritance hierarchy Key: CAY-2779 URL: https://issues.apache.org/jira/browse/CAY-2779 Project: Cayenne Issue Type: Bug Affects Versions: 4.2.RC1 Reporter: Andrus Adamchik Fix For: 4.2
A model the same as the one in CAY-2777: {noformat} // a table with a many to many to self T1: id, type T11: child_id, parent_id; // Base ObjEntity O1: - flat rel "parents" mapped as "db:parents.parent" // Sub ObjEntity 1 O1S1: - flat rel "children" mapped as "db:children.child" // Sub ObjEntity 2 O1S2: {noformat} n:m has "Nullify" delete rule on both ends. When deleting a child, the child is not removed from parent's children, because the code gets confused about the inheritance hierarchy. Specifically here inside ObjectContextDeleteAction, "reverseArc" is null, whereas it should be "O1S1.children" : {noformat} case DeleteRule.NULLIFY: ArcProperty reverseArc = property.getComplimentaryReverseArc(); if (reverseArc == null) { // nothing we can do here break; } {noformat} Oddly enough, it still generated a correct DB operation, deleting the join table record, because of the hardcoded flattened relationship processing block just a few lines prior the one mentioned above. These two things are still incorrect: * Parent object still has a child in its collection * "nodeRemoved" graph operation is not recorded, so any listener flows that depend on it do not work. -- This message was sent by Atlassian Jira (v8.20.10#820010)