commitChangesToParent() calls pre-persist on the parent's copy of the object, so technically it is called once per object instance. Now I agree that the callback mechanism was designed with no concept of nested contexts in mind (we cloned it from the JPA spec)... I guess once way to address the problem is to check where it is called, and skip it either for the child or the parent context:

void prePersist() {
   if(getObjectContext().getChannel() instanceof ObjectContext) {
        // nested context
        ....
   }
   else {
        // topmost context
        .....
   }
}

Andrus


On Aug 19, 2008, at 8:45 AM, Dave Dombrosky wrote:

Should commitChangesToParent() call my pre-persist method?

I have coded up a pre-persist listener to set my object's type for
cayenne inheritance, and also to create some new objects to fill in
required relationships.  The problem I am running into is that my
pre-persist method gets called twice.  Once when i register my object
with the child context, and once again when the changes are committed
to parent.  This causes issues because I my relationships point to
unfilled objects, and when I try to commit I get validation errors
because of these extra objects.

Is this the expected behavior of pre-persist?  If so, then where would
be a good place to initialize required relationships?

-Dave


Reply via email to