On Jun 3, 2007, at 2:00 AM, Craig L Russell wrote:

I hope this doesn't confuse things more, but in reality, you often have schema that fall into multiple categories of mapping.

No confusion at all - in reality we do have to deal with mixed scenarios, so we have to account for them.

For example, a hierarchy might have a table that maps all of the fields of the superclass A. Class B extends A and has a table BS containing a discriminator column WHICHB and the fields of all of the subclasses of B. Another class C extends A and its table C maps only the fields of class C while subclasses C1 and C2 each have their own table for their fields.

To make it easier on the ORM, table A might also include a discriminator column WHICHA that explicitly identifies the class that the row corresponds to.

One note - in Cayenne discriminator column is implemented via a more generic entity qualifier expression (e.g. it can match multiple columns or use some custom comparison condition). This approach generally prevents a simplification of a mandatory discriminator column on a root class, although we may actually work around it and start by implementing a simplified case (i.e. support entity qualifiers in the form "attribute = constant" on all subentities).

I am still entertaining the idea that we can support vertical inheritance without a designator column, and I don't think that having such column in place is such a big shortcut in implementation. After all the logic will be the same as with horizontal inheritance - sublcass criteria is an existence of a row in the subclass table).

Andrus








Reply via email to