Re: Cleaning up inheritance tests

From: Kevin Menard (kmenar..ervprise.com)
Date: Sat Mar 29 2008 - 14:39:16 EDT

  • Next message: Andrus Adamchik: "Re: Cleaning up inheritance tests"

    On 3/29/08 1:33 PM, "Andrus Adamchik" <andru..bjectstyle.org> wrote:

    >
    > On Mar 29, 2008, at 3:16 PM, Kevin Menard wrote:
    >
    >> Essentially, what I'm seeing is that there is not a 1:1 correlation
    >> between
    >> relationships and their reverses.
    >
    > True. A very good point. From what I can tell this may be another way
    > to tell what "redundant relationships" are.

    I think we may have had a different understanding of what redundant means.
    I was thinking internal to Cayenne, not considering relationships mapped by
    the user as "redundant", even if they may in fact be.

    > In the case described both relationships are equally valid reverse
    > relationships. I wouldn't even call the situation ambiguous - it is
    > just two clearly defined relationships instead of one like we assumed
    > in the past.
    >
    > So where do we go from here? There are two ways: we either change the
    > API to reflect 1:N natire of reverse relationship (and deal with it
    > everywhere throught the framework, e.g by setting multiple reverse
    > relationships inside CayenneDataObject, etc.) or disallow redundant
    > mapping explicitly. Either way it is a good idea to acknowledge this
    > scenario explicitly in some way, so that users know what they are
    > dealing with.

    Right. This was what I've been trying to convey since opening the two
    issues. I'm glad we're both on the same page now.

    > A lazy person in me votes for the later option. Or maybe not that
    > lazy? I always liked my object graph structure to avoid any
    > inconsistency (e.g. assume relationship cardinality that DB does not
    > enforce) and redundancy (e.g. RelatedEntity double relationships over
    > the same set of joins). So mentally I never allowed myself to map
    > anything like that, and never felt the need to do so. So maybe we
    > shouldn't enable this scenario, complicating the framework
    > significantly, just because we can?

    Yeap, this is the core of what I was getting at. One problem I see is that
    the autocreated runtime relationships affects the relationship cardinality
    and can be a real pain in the neck for the user to debug. Any error message
    would not match what the user has mapped and their non-intuitive naming
    would not lend to easy debugging. Please note I'm talking about runtime
    relationships created for base classes, as demonstrated in the test for
    CAY-1009.

    Another way to consider this is how it would impact the work for vertical
    and horizontal inheritance. Would we need to be able to support 1:N
    relationships in that case? If so, we may as well add
    getReverseRelationships() : List<Relationship> now to make that work
    simpler.

    -- 
    Kevin
    



    This archive was generated by hypermail 2.0.0 : Sat Mar 29 2008 - 14:39:52 EDT