Re: Cleaning up inheritance tests

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Sat Mar 29 2008 - 15:07:49 EDT

  • Next message: Kevin Menard: "Re: Cleaning up inheritance tests"

    On Mar 29, 2008, at 8:39 PM, Kevin Menard wrote:

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

    There's no difference in the runtime... Redundant is redundant, and we
    either know how to handle it or not.

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

    Hmm... Bailing on runtime relationships (at least on the required
    variety) would result in us losing support for one-way to-many (and
    IIRC also one-way 1..1) which would be a very serious downgrade. I
    don't see any *simple* alternative to handle that functionality. But i
    we develop one, I'd say drop runtime ObjRelationships and only keep
    the Db.

    Until then that I'd rather change my earlier statement about
    "BaseEntity -> DirectToSubEntity -> SubEntity" relationships chain,
    and call it "implicitly redundant". This would be equivalent to the
    following rule:

    "All Cayenne ObjRelationships implicitly or explicitly require a
    single reverse relationship. If the mapping does not contain a reverse
    relationship, Cayenne creates one (invisible to the user) during
    runtime. If the mapping results in more than one relationship matching
    reverse relationship criteria, this will result in a runtime exception
    thrown".

    That's how I see the "lazy" option implementation.

    Andrus



    This archive was generated by hypermail 2.0.0 : Sat Mar 29 2008 - 15:08:27 EDT