Re: Setting a relationship to a generic DataObject in order to log the primary key value

From: Mike Kienenberger (mkienen..mail.com)
Date: Fri Dec 30 2005 - 15:19:23 EST

  • Next message: Gary Jarrel: "Re: Modeller M9 Problem"

    I did end up solving this by programmically creating the relationships.
    It wasn't as bad as I had thought it would be, although it's certainly
    not as clean as I'd like.

    On 12/30/05, Andrus Adamchik <andru..bjectstyle.org> wrote:
    > Mike,
    >
    > See my message on cayenne-devel regarding a possible general solution
    > to the audit problem. Suggested two-phase commit should solve this
    > problem as well.
    >
    > http://objectstyle.org/cayenne/lists/cayenne-devel/2005/12/0087.html
    >
    > Andrus
    >
    > On Dec 20, 2005, at 7:40 PM, Mike Kienenberger wrote:
    >
    > > I need to create audit log database records each time I commit
    > > changes. One of the fields in the audit record needs to be the
    > > primary key of the record being audited.
    > >
    > > In a past project I handled this by creating a relationship from my
    > > audit log entity to every other entity in existance, using the same
    > > "foreignRecordID" in my audit log. Then my class generation template
    > > would substitute in the correct name of the relationship to use.
    > >
    > > setForeignAccount(Account)
    > > setForeignAccountActivation(AccountActivation)
    > > setForeignACHProcessingQueue(ACHProcessingQueue)
    > > setForeignApplicationData(ApplicationData)
    > > setForeignBank(Bank)
    > > setForeignBankAccount(BankAccount)
    > > setForeignBatchJobData(BatchJobData)
    > > setForeignComment(Comment)
    > > setForeignConsolidatedAccount(ConsolidatedAccount)
    > > setForeignCreditCard(CreditCard)
    > > setForeignDataDictionary(DataDictionary)
    > > setForeignHelpTopic(HelpTopic)
    > > setForeignJustBilledAccount(JustBilledAccount)
    > > setForeignLocalization(Localization)
    > > setForeignPaperBillWarning(PaperBillWarning)
    > > setForeignPaymentHistory(PaymentHistory)
    > > setForeignPaymentInProgress(PaymentInProgress)
    > > setForeignPaymentMethod(PaymentMethod)
    > > setForeignPendingPayment(PendingPayment)
    > > setForeignProcessingResultAction(ProcessingResultAction)
    > > setForeignRecordKey(Integer)
    > > setForeignScheduledPayment(ScheduledPayment)
    > > setForeignSendPaperBillChange(SendPaperBillChange)
    > > setForeignStateProvince(StateProvince)
    > > setForeignUser(User)
    > > setForeignUserAccountRelationship(UserAccountRelationship)
    > >
    > > This was really ackward as it required adding a new relationship to
    > > the audit log whenever a new Entity was added, and invariably these
    > > new relationships didn't get created, and the application crashed.
    > >
    > > What I'd really like to do is be able to use
    > > "changeLog.setForeignRecord(DataObject dataObject)" generically, but I
    > > can't figure out a way to do this.
    > >
    > > I can do the following, but it fails on insert logging since the
    > > primary key doesn't exist yet.
    > >
    > > Object primaryKey = DataObjectUtils.pkForObject(dataObject);
    > > Number primaryKeyNumber = (Number)primaryKey;
    > > changeLog.setForeignRecordId(new Integer
    > > (primaryKeyNumber.intValue()));
    > >
    > > I really don't want to go back to the old methodology. It was painful
    > > with just a few tables, and now I've got hundreds of tables to deal
    > > with.
    > >
    > > The only idea I've come up with is to programmically create the
    > > relationships when the application starts up instead of defining them
    > > in the modeler.
    > >
    > > -Mike
    > >
    >
    >



    This archive was generated by hypermail 2.0.0 : Fri Dec 30 2005 - 15:19:25 EST