You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Andrus Adamchik (Jira)" <ji...@apache.org> on 2022/11/22 13:57:00 UTC

[jira] [Created] (CAY-2779) "Nullify" delete rules is not processed with n:m and inheritance hierarchy

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)