On Aug 2, 2008, at 9:16 PM, Marcin Skladaniec wrote:

Hi

I'm going to add support for horizontal inheritance to cayenne. I've already added functionality for an entity to be abstract (https://issues.apache.org/cayenne/browse/CAY-794 ), now the second part.

BTW, I don't recall those patches being committed. Which patches out of the 3 files there should go in? Is it just the latest one (abstract- obj-entity.diff)?


Current implementation of inheritance allows only one of two parameters set: "inheritance" or "table/view" If inheritance is selected the ObjEntity does not have any own DbEntity or DbAttributes, it gets them only from the parent ObjEntity. (although it has all the ObjAttributes defined in model) Table/view is a simple approach where the ObjEntity gets its attributes from its definition in model, there is no parent ObjEntity.

Correct.

For horizontal inheritance ObjEnity.getAttributes() should return both the attributes defined in model as well as from parent ObjEntity. Yet having both parameters accepted at the same time might now do it well enough, therefore I would like to propose adding yet another parameter to the model: "inheritance db relationship". On database level the horizontal inheritance is nothing more than a one-to-one relationship between two tables, and reflecting this in the model will be required to route the queries and inserts correctly.

Did I miss something ? Is that the right approach ?
Marcin

I think you are talking about VERTICAL inheritance, not horizontal here. In case of horizontal you wouldn't have a relationship between subclass/superclass tables. Anyways, assuming we are discussing vertical inheritance, yes, there is a relationship involved. Per JPA approach, this relationship can be figured automatically : it is a 1..1 relationship between the PK's of two tables. So we don't have to store it in XML, as we can find it in runtime. Still internally there should be a concept of a relationship joining parent and child tables, so you are right about the big picture.

Andrus

Reply via email to