As Malcolm said, I wouldn't model this with inheritance.
I've done something similar, probably using what Malcolm called
Composition Design.
I used a LOG table to track field-level changes in my application:
ColumnName Type Name Size Scale Nullable AutoIncrement Type
FIELD_NAME VARCHAR2 64 0 Not Null false 12
FOREIGN_RECORD_KEY NUMBER 22 -127 Nullable false 2
LOG_ID NUMBER 22 -127 Not Null false 2
MODIFICATION_DATE TIMESTAMP 11 1 Not Null false 93
NEW_VALUE VARCHAR2 255 0 Nullable false 12
OLD_VALUE VARCHAR2 255 0 Nullable false 12
TABLE_NAME VARCHAR2 32 0 Not Null false 12
I then created a relationship between this table and every table in my
model. This can work well for write-only tables, but doing queries
on it requires knowing the table name/field_name.
One maintenance issue is that you have to update your ListItem model
every time you add or remove a new kind of item.
As for the specific issue with ${objEntity.getClientSuperClassName()}
and ${anObjEntity.getClientClassName()}, you have to manually put the
inheritance superclass name into those fields. I was overloading the
meaning of those fields, and there may be problems doing this in 3.0
now that ROP is more fully implemented. I would think it would still
be workable under 2.0, though.
On 7/10/08, ihawk ihawker <ihawkmail@gmail.com> wrote:
> Hello!
>
>
> I am trying to model a list of heterogeneous entities by having a
> ListItem table where the list item entity is able to point to an
> arbitrary entity (Person, Computer, URL, Movie, etc).
>
>
> I don't want to use single-table inheritance natively supported by
> Cayenne because of big database size overheads (the entities are
> drastically different from one another). In fact I don't necessarily
> want to use inheritance at all (PersonListItem, ComputerListItem,
> etc), but this seems to be the only option in Cayenne to model such a
> list.
>
>
> I've read Mike Kienenberger's article
> (http://cwiki.apache.org/CAY/compositeverticalinheritance.html) about
> simulation of vertical inheritance in Cayenne and found that it might
> be acceptable for my case.
>
> But I am having problems generating classes from the velocity template
>
> - Скрыть цитируемый текст -
> given in the article, although I've used code generator parameters
> recommended in article.
>
>
> It seems the parser fails to parse ${objEntity.getClientSuperClassName()},
>
> ${anObjEntity.getClientClassName()}, although other methods/attributes
> of "objEntity", "entityUtils", "stringUtils", "importUtils" are parsed
> correctly.
>
>
> I've tried with Cayenne 2.0.4, Cayenne 3.0M4.
>
>
> Thank you,
>
> Andrey Strib.
>
This archive was generated by hypermail 2.0.0 : Thu Jul 10 2008 - 12:25:42 EDT