Created JIRA CAY-2254
-----Original Message----- From: Musall, Maik Sent: Thursday, March 2, 2017 10:49 AM To: user@cayenne.apache.org Subject: Re: Validation and @PrePersist Hi Jurgen, > Am 02.03.2017 um 09:33 schrieb do...@xsinet.co.za: > > I agree with your reasoning. So then the original description of how > lifecycle events should behave in 3.1 is conceptually better (i.e. that > PrePersist & PreUpdate occur before validation), and the historical behaviour > is then a bug ? That would be my conclusion, too. > It would be good for this to be changed, unless there's backward > compatibility issues :-) Well, there's no better time to change this than at the beginning of M6, right? :-) Maik > > -----Original Message----- From: Musall, Maik > Sent: Thursday, March 2, 2017 9:53 AM > To: user@cayenne.apache.org > Subject: Re: Validation and @PrePersist > > Hi Jurgen, > > PostAdd is fine for seting a createDate, but what about an updateDate or > something similar? If these assertions are all true: > > 1. validation is supposed to not change attributes > 2. no more changes should be made after validation happened > 3. PrePersist runs after validation > > then there is just no place left to set something like an updateDate. Also, > PrePersist would be restricted to do read-only checks that you can also do > during validation, which makes no sense to me conceptually. > > Maik > > > >> Am 02.03.2017 um 07:56 schrieb do...@xsinet.co.za: >> >> 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 <h...@godurkodi.is> 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 <blackn...@gmail.com> 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 <h...@godurkodi.is> >>> 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 >>> >> >