Hmm, I must be missing something. I looked at CAY-414 and looked for
related changes in the latest code, but didn't grok it. I tried the
validateFor methods, but they still get called for phantom changes... I
tried adding to a to-many and setting an attribute to its current
value. Tried the latest nightly jar.
This isn't an urgent thing for me. I'll wait a while and check again.
Thanks.
Andrus Adamchik wrote:
> I suggest overriding the validateFor* methods. This was problematic
> in the past, but now Cayenne guarantees that validation methods are
> called only for the objects that will be committed (i.e. those with
> "phantom" modifications are not validated).
>
> Andrus
>
>
> On Apr 28, 2006, at 12:40 PM, Bryan Lewis wrote:
>
>> We have a time-when-last-modified timestamp column in most of our
>> tables
>> to serve as an optimistic-locking attribute. At present we're setting
>> it with a bit of inelegant code that imitates the way we used to do it
>> in our old WebObjects days... we have a saveChanges() method that wraps
>> dc.commitChanges(). Before the commit we can timesstamp the newObjects
>> and modifiedObjects.
>>
>> The trouble is, this sets the timestamp on objects that haven't really
>> been modified... an attribute was set to the same value it already had,
>> or a to-many relationship was added to. Cayenne figures out later in
>> the pipeline that those other changes aren't real and doesn't generate
>> SQL for them. How can I hook into that later point, and set the
>> timestamp only if the row is about to be updated? I looked at
>> DataContextDelegate, but I guess that's for external changes. The
>> event
>> mechanism looks closer, although the docs say that dc.onSync() isn't
>> intended for direct use. Worst case, I could compare the object's
>> current values to the snapshot but that seems reinventing the plumbing.
>>
>> Thanks.
>>
>>
>
This archive was generated by hypermail 2.0.0 : Fri Apr 28 2006 - 15:49:31 EDT