RE: Vertical inheritance support proposal

From: Gentry, Michael \(Contractor\) ("Gentry,)
Date: Fri May 20 2005 - 12:13:04 EDT

  • Next message: Mike Kienenberger: "Re: Vertical inheritance support proposal"

    Ah, that's all the "easy" stuff. You still need to be able to handle
    queries on the subclass which references entities (not using a
    relationship) in the parent class. The would require modifying the
    Expression type classes.

    /dev/mrg

    -----Original Message-----
    From: Mike Kienenberger [mailto:mkienen..laska.net]
    Sent: Friday, May 20, 2005 11:53 AM
    To: cayenne-deve..bjectstyle.org
    Subject: Vertical inheritance support proposal

    I've been thinking a lot about how to implement vertical inheritance
    using
    Cayenne.

    These are the changes I see as necessary:

    1) Specify a superEntity and the relationship pointing to that entity.

    For example, if I have Group and Organization, with Organization
    inheriting
    from Group, and having a dependent PK on Group, and a to-one
    relationship to
    group named "toGroup", then I need to both mark Group as the superEntity
    and
    mark "toGroup" as the superEntity relationship. I think this is the
    only
    change needed in the model and modeler.

    2) Create templates to support vertical inheritance.

    These would basically delegate any read/writes to the superEntity for
    all
    superEntity attributes and relationships. Possibly also create a
    constructor creating the superentity and setting the relationship.

    3) Change DataContext to modify superEntity status (recursively) when
    entity
    is registered/invalidated. Primarily, I see this as necessary for
    registering and invalidating a new entity. The templates can actually
    provide support for creation (call superEntity constructor in the
    constructor and set the relationship), and the delete rules can handle
    the
    case of deletion. Modification is already taken care of by the
    template
    delegation. There may be other DataContext changes necessary -- I
    haven't
    really looked over DC in detail to see if there's anything else i
    missed.

    ==

    Actually, I've went back and re-read Michael's original message on using

    setPersistenceState() to handle NEW (and could, by extension, handle
    HOLLOW)
    for registration/invalidation. So perhaps this could also be
    template-generated and handled in the DataObject as well.

    Also, since Vertical Inheritance relies on a dependant PK to the
    superEntity, perhaps that also doesn't need to be modeled. It'd be the
    only
    dependant-PK to-one relationship.

    So maybe it should all be handled by templating. The only "trick"
    would be
    getting a reference to the superEntity in the template, but that should
    be
    possible.

    Thoughts?

    As a first-attempt, this seems like the path of least resistance (and
    least-likely to break something). Being able to "see" vertical
    inheritance
    in the modeler (a la EOModeler) would be nice, but isn't a necessity.

    -Mike



    This archive was generated by hypermail 2.0.0 : Fri May 20 2005 - 12:13:09 EDT