"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 - 13:00:29 EDT