Re: Vertical inheritance support proposal

From: Mike Kienenberger (mkienen..laska.net)
Date: Fri May 20 2005 - 17:22:39 EDT

  • Next message: Andrus Adamchik: "Re: Vertical inheritance support proposal"

    Andrus Adamchik <andru..bjectstyle.org> wrote:
    > 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?

    This is probably a better link as it has more than just the picture :)

    http://developer.apple.com/documentation/WebObjects/UsingEOModeler/7ModelingInheritance/chapter_7_section_3.html#

    Yeah, it's primarily flattened attributes (if you're also including
    flattened to-dependent-PK relationships).
    But it also involves managing multiple object entities as if they were one
    single entity (from the bottom up), and as single entities from the top
    down.

    (Side note: I don't understand the reasoning behind assigning a restricting
    qualifier to parent entities on the EOF page. If I want to query against
    "Person", then I want all Person records, not just Employee Persons -- I can
    get those by querying against Employee).

    > > "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 - 17:20:30 EDT