Re: Vertical inheritance support proposal

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Fri May 20 2005 - 15:36:23 EDT

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

    AFAIK vertical inheritance
    (http://developer.apple.com/documentation/LegacyTechnologies/WebObjects/WebObjects_4.5/System/Documentation/Developer/EnterpriseObjects/DevGuide/EOsII7.gif)
    is simply combining our current single table inheritance with a new
    flattened attributes feature. Meaning:

    1. No template changes are needed.
    2. Flattened attributes support is needed in the Modeler.
    3. Flattened attributes support is needed in query translators and commit
    handlers.

    I am sure there will be some additional issues when combining flattened
    attributes with inheritance, but I think we need to start by implementing
    flattened attributes first.

    Am I missing something obvious?

    Andrus

    > "Gentry, Michael (Contractor)" <michael_gentr..anniemae.com> wrote:
    >> 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.
    >
    > So what you're saying is that it's gonna require more than templates :)
    > It did all seem too easy, and I was sure I was overlooking something.
    >
    > Thanks!
    >
    >> -----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 - 15:36:25 EDT