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

Robert Zeigler commented on CAY-1008:
-------------------------------------

I think you're right that "limitation" is right word.  From a "naive user" 
perspective, however, it "feels like" a bug, since object-graph consistency is 
nicely handled, and then you add that second object relationship, and, hey, my 
object graph isn't consistent anymore.

Depending on my time, I may take a shot at patching this. We'll see.

> Reverse relationships may not be correctly set if inheritance is used.
> ----------------------------------------------------------------------
>
>                 Key: CAY-1008
>                 URL: https://issues.apache.org/cayenne/browse/CAY-1008
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Cayenne Core Library
>    Affects Versions: 3.0
>            Reporter: Kevin Menard
>            Assignee: Andrus Adamchik
>
> Given two entities, Employee and Address, such that there is a one-to-many 
> relationship between the two, it may be possible that reverse relationships 
> are not fully set if inheritance is used.
> For example, let's say that HomeAddress extends Address, then the following 
> fails:
> Employee e = context.newObject(Employee.class);
>         Address a = context.newObject(Address.class);
>         a.setToEmployee(e);
>         assertEquals(1, e.getAddresses().size());
>         assertEquals(0, e.getHomeAddresses().size());
>         HomeAddress ha = context.newObject(HomeAddress.class);
>         ha.setToEmployee(e);
>         assertEquals(2, e.getAddresses().size());
>         assertEquals(1, e.getHomeAddresses().size());
> The last assertion fails as e.getHomeAddresses() will return an empty list.
> On the face of it, the problem is that the ObjRel "addresses" is being set 
> rather than "homeAddresses".  This is due to how 
> ObjRelationship#getReverseRelationship() determines reverse relationships.  
> It does so by inspecting the relationship structure and if there's a match, 
> returns it.  "addresses" and "homeAddresses" have the same structure and 
> "addresses" is the first match found and returned.
> Simply reversing order or other similar tricks won't really do anything more 
> for us though.  The real issue seems to be how to deal with multiple ObjRels 
> that match to the same DbRel.  Each ObjRel does need to be updated in order 
> for the graph to remain consistent.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to