Re: Modeling heterogeneous entities (inheritance issue)

From: Mike Kienenberger (mkienen..mail.com)
Date: Thu Jul 10 2008 - 12:25:05 EDT

  • Next message: bobsponge: "RE: Autogenerated keys issues"

    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