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