Re: Modeling heterogeneous entities (inheritance issue)

From: Malcolm Edgar (malcolm.edga..mail.com)
Date: Thu Jul 10 2008 - 06:52:43 EDT

  • Next message: bobsponge: "Autogenerated keys issues"

    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 <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 - 06:53:14 EDT