Hi All
I've recently upgraded from Cayenne 3.1 to 4.2 and noticed that when
deleting an ObjEntity with flattened attributes Cayenne now deletes the
related DB attribute's row as well.
So if we have for example an ObjEntity "FlatPainting" with flattened
attribute "galleryName". If we then delete a "FlatPainting" then the
associated gallery will also be deleted, leaving all other paintings at
that gallery without a valid Gallery link.
Furthermore if we add to our "FlatPainting" a "gallery" relationship
attribute with delete rule Deny, the gallery is still deleted.
I would submit a bug report and PR to fix but looking at the code [1] and
tests [2] I was surprised to find that the behavior of the first example
appears to be intentional which is why I'm writing this email.
Unless I'm missing something I would like to submit said bug report and PR
to revert this to either 3.1 behavior (no cascade delete) or a modified
version of the current behavior.
I think the original intention was for something like a "PaintingFull"
ObjEntity having all painting attributes and a flattened attribute to
"PaintingInfo" as well, where the relationship is 1:1. In this case it
makes sense that deleting a "PaintingFull" should also delete its
associated PaintingInfo record.
If there's no objection I could try and add a check for this and only do
the delete if the relationship is 1:1 and there's no relationship
attribute with delete rule Deny. If it's too complicated I'd just revert
the current behavior to 3.1
Thoughts please.
Thanks, regards
Jurgen
[1] RootRowOpProcessor.visitDelete
[2] DataContextFlattenedAttributesIT.testDelete