Hi All
We had a similar discussion Sept-Oct 2012 where it was noted that there was
a discrepancy between the docs and the implementation. That was with 3.1B
where the behaviour was the same as it is now, i.e. validation occurs before
PrePersist (but as noted by Michael the 3.1 docs incorrectly state
"after" ).
So I assume that subsequently the docs were updated for cayenne 4 to
correctly reflect the behaviour.
Back then it was stated that PostAdd was the correct place to do this kind
of thing, which I think is fine for fields that have standard default
values.
It can get a bit clumsy sometimes where you sometimes have to have both
PostAdd and PrePersist doing the same thing. For example for a timestamp
field where object entity creation (PostAdd) occurs much earlier than the
commit (PrePersist), but you want the commit timestamp. This is where I
would have preferred the behaviour that Hugi is looking for where PrePersist
is called first, before validation.
Cheers,
Jurgen
-----Original Message-----
From: Michael Gentry
Sent: Wednesday, March 1, 2017 5:38 PM
To: Cayenne Users
Subject: Re: Validation and @PrePersist
Hi Hugi,
I was indeed looking at < 4. No idea why the change was made. Perhaps
someone else can answer that one...
Thanks,
mrg
On Wed, Mar 1, 2017 at 10:03 AM, Hugi Thordarson <[email protected]> wrote:
Hi Michael,
the documentation was apparently changed for 4.0 in 2015 to reflect the
current behaviour:
https://github.com/apache/cayenne/commit/5bb12cd36f0d87e3b217cdc20c22a0
f6dc9613f3#diff-5b9a57288e30ef9855d80a63a812ec4f
Cheers,
- hugi
> On 1. mar. 2017, at 14:59, Michael Gentry <[email protected]> wrote:
>
> Hi Hugi,
>
> If validateForInsert() is being called before PrePersist, we have a
> disconnect between the documentation and the behavior you are seeing:
>
> "PrePersist: right before a new object is committed, inside
> ObjectContext.commitChanges() and ObjectContext.commitChangesToParent()
> (and prior to validateForInsert())."
>
> What version of Cayenne are you using? I wonder if something has
> changed
> or if the documentation is just wrong.
>
> Thanks,
>
> mrg
>
>
>
> On Wed, Mar 1, 2017 at 6:18 AM, Hugi Thordarson <[email protected]>
wrote:
>
>> Hi all,
>> I have some logic in a Listener that uses @PrePersist to populate the
>> value of a required attribute before committing changes. Turns out this
>> doesn’t work, since Cayenne invokes validateForInsert() before running
>> @PrePersist.
>>
>> Any suggestions for where I can invoke logic populates required values
>> before validation?
>>
>> Cheers,
>> - hugi