[jira] Commented: (CAY-1008) Reverse relationships may not be correctly set if inheritance is used.

From: Robert Zeigler (JIRA) ("Robert)
Date: Mon Jun 02 2008 - 16:05:52 EDT

  • Next message: JIRA: "[jira] Created: (CAY-1063) Derby adapter is not able to remove NOT NULL relationship"

        [ 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.
    



    This archive was generated by hypermail 2.0.0 : Mon Jun 02 2008 - 16:06:14 EDT