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/17 17:19:00 UTC

[jira] [Comment Edited] (CAY-2777) Reverse relationship is not set with single table inheritance

    [ https://issues.apache.org/jira/browse/CAY-2777?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17635464#comment-17635464 ] 

Andrus Adamchik edited comment on CAY-2777 at 11/17/22 5:18 PM:
----------------------------------------------------------------

The culprit of the commit issue is "DefaultDataDomainFlushAction.mergeSameObjectIds(..)", or more specifically, the fact that two fake temp ObjectIds associated with two T11 DbRowOps are not equal, even though their "replacementIds" are the same


was (Author: andrus):
The culprit in the commit problem is "DefaultDataDomainFlushAction.mergeSameObjectIds(..)", or more specifically, the fact that two fake temp ObjectIds associated with two T11 DbRowOps are not equal, even though their "replacementIds" are the same

> Reverse relationship is not set with single table inheritance
> -------------------------------------------------------------
>
>                 Key: CAY-2777
>                 URL: https://issues.apache.org/jira/browse/CAY-2777
>             Project: Cayenne
>          Issue Type: Bug
>    Affects Versions: 4.2.RC1
>            Reporter: Andrus Adamchik
>            Priority: Major
>             Fix For: 4.2
>
>
> Given the model:
> {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}
> {noformat}
> O1S1 parent = ...
> O1S2 child = ...
> // THE PROBLEM IS HERE
> // This fails to set "parents" relationship of O1S2
> parent.addToChildren(child);
> {noformat}
> The culprit seems to be "ObjRelationship.getReverseRelationship()", specifically this check here
> {noformat}
> for (ObjRelationship relationship : target.getRelationships()) {
>             // TODO: this should be replaced with inheritance-aware code. 
>             // "relationship.getTargetEntity()" should be allowed to be a 
>             // super entity of source
>             if (relationship.getTargetEntity() != source) {
>                 continue;
>             }
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)