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 <[EMAIL PROTECTED]> 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.
>

Reply via email to