primary key for an entity? (and other fun things)

From: Mike Kienenberger (mkienen..laska.net)
Date: Mon Sep 08 2003 - 17:08:09 EDT

  • Next message: Mike Kienenberger: "Equivalent for WebObjects localInstanceOfObject() or Toplink registerExistingObject()?"

    Despite the fact that it's called a "meaningless primary key", I would like
    to programmically determine the value of each entity's primary key.

    One way for me to do this is to generate a primaryKey() method in my class
    generation template, but I'd rather use the framework if possible.

    It seems like the way to do this is:

                    Class objEntityClass = aCayenneDataObject.getObjectId().getObjClass();

    and from there:

                    DbEntity aDbEntityClass = objEntityClass.getDbEntity();

    Are these intended for "user" access, or only internal framework use?

    Actually, maybe I'll explain the usage first in case there's an easier way
    to do this in Cayenne.

    ======

    I have business requirements to log all database changes (record creation,
    deletion, modification) to a ChangeLog table (except, of course, the
    ChangeLog changes). My template creates setAndLogX(CustomLoggingData,
    value) methods for every setX(value) method (and generally marks setX(value)
    private or protected as allowed by the framework). The setAndLogX() method
    calls setX(value) and then creates a ChangeLog record.

    My changelog table contains

    ChangeLog_ID (meaningless primary key)
    Entity,
    Attribute,
    Old Value,
    New Value,
    Modification Date,
    foreignRecordKey
    CustomLoggingData

    All of my non-read-only entities have a single integer meaningless primary
    key.

    foreignRecordKey is the primary key of the table/field change which we're
    logging.

    In WebObjects, I could pull out all of the information out of the model
    representation.

    In Toplink, I could pull most of it out of the model, and the rest out of
    hardcoded template-generated code.

    In WebObjects, I could also create a one-to-one relationship for each
    foreignKey while in Toplink I had to manually look up the primary key and
    set the foreignRecordKey value.

    ======

    In addition, there are a couple of Entities where the primary key is used as
    an identifier.

    For each user object, we output to a log the username and primary key of the
    user object.

    For each paymentHistory object, we send the paymentHistory primary key to
    our processing gateway as an invoice number.

    Thanks,

    -Mike



    This archive was generated by hypermail 2.0.0 : Mon Sep 08 2003 - 17:05:31 EDT