For this type of design a couple of alternatives are: #1 - Composition Design
Follow the object composition pattern, i.e. an object has a, instead of an object is a. So your base entity could maintain a type column and then foreign key relationships to other tables, dependent upon what type of entityit is. #2 - Metadata Design This pattern has a header table, with common object header information, and a link to a table of name / value pairs which represent the object attributes. This can be cut a number of ways. You can have a table which defines object attribute types or meta data, and then have an join table between the attribute type (meta data) and object table, which contains the objects attribute value. Both of these design's have pros and cons. Metadata Design's are very flexible and can be remodelled at runtime, but they usuallly done scale well and are difficult to write reports against. The composition based design is pretty well the flip side of the Metadata design. regards Malcolm Edgar On Thu, Jul 10, 2008 at 8:03 PM, 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. >