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)