On 31/05/2007, at 10:44 AM, Mike Kienenberger wrote:

On 5/30/07, Aristedes Maniatis <[EMAIL PROTECTED]> wrote:
When we get to vertical inheritance there will be at least one other
property added to the ObjEntity: the name of the relationship used to
find the superclass.

When we get to inheritance, we'd be wise to follow the JPA methodology
for specifying inheritance relationships. Vertical and single-table
is well-defined.

Fair enough.

<disclaimer>I'm coming from years in the land of EOF where for vertical inheritance there is indeed a relationship to the parent. But this was needed, I suppose, in order to flatten the parent's attributes/relationships into the child; but there's not much difference, conceptually, for mapping inheritance</disclaimer>

So really (if that idea was switched for something more JPA friendly) the Inheritance strategy [as I mentioned in the original email 'Modelling improvements: inheritance + interfacing (Draft)'] is still easy determined by these simple conditions:
a) is the parent ObjEntity mapped to the same DbEntity?
b) is the parent ObjEntity mapped to a DbEntity at all?

e.g.,
a == YES, b == YES      --> Inheritance.SINGLE_TABLE
a == NO, b == NO        --> Inheritance.TABLE_PER_CLASS
a == NO, b == YES       --> Inheritance.JOINED

... and together with the further condition (isAbstract) also determines whether we're doing a deep fetch, plus whether there's an @DiscriminatorColumn etc.

Okay, so consider the request for superRelationship dropped. (See disclaimer :-) Well that makes it simpler to do all of this ;-)

I can't remember if the optional horizontal
relationships are spelled out in the spec.

from: http://java.sys-con.com/read/286901.htm
- SINGLE_TABLE: Single-table-per-class inheritance hierarchy. This is the default strategy. The entity hierarchy is essentially flattened into the sum of its fields, and these fields are mapped down to a single table. - JOINED [1]: Common base table, with joined subclass tables. In this approach, each entity in the hierarchy maps to its own dedicated table that maps only the fields declared on that entity. The root entity in the hierarchy is known as the base table, and the tables for all other entities in the hierarchy join with the base table. - TABLE_PER_CLASS [2]: Single-table-per-outermost concrete entity class. This strategy maps each leaf (i.e., outermost, concrete) entity to its own dedicated table. Each such leaf entity branch is flattened, combining its declared fields with the declared fields on all of its super-entities, and the sum of these fields is mapped onto its table.

[1] vertical inheritance
[2] horizontal inheritance

with regards,
--

Lachlan Deck



Reply via email to