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
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 wrote:

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

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

I've tried with Cayenne 2.0.4, Cayenne 3.0M4.

Thank you,

Andrey Strib.

Search Discussions

Discussion Posts


Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 4 of 4 | next ›
Discussion Overview
groupuser @
postedJul 10, '08 at 10:03a
activeJul 10, '08 at 4:25p



site design / logo © 2022 Grokbase