When I ran into this same scenario I realized that “validateForInsert” was the
hook I needed, instead of @PrePersist.
@Override
public void validateForInsert(ValidationResult validationResult) {
if (getReference() == null || getReference().isEmpty()) {
setReference(System.getNextPurchaseOrderReference());
}
super.validateForInsert(validationResult);
}
> On Mar 1, 2017, at 5:51 AM, Hugi Thordarson <[email protected]> wrote:
>
> Hi Jurgen,
> fine suggestion but unfortunately not the part of the lifecycle I need to
> catch—the action needs to be performed before committing, not after adding
> (so basically I need @PrePersist—but I need it before validation happens).
>
> Cheers,
> - hugi
>
>
>> On 1. mar. 2017, at 13:14, <[email protected]> <[email protected]> wrote:
>>
>> Hi Hugi
>>
>> For this kind of thing use @PostAdd instead.
>>
>> Regards
>> Jurgen
>>
>>
>> -----Original Message----- From: Hugi Thordarson
>> Sent: Wednesday, March 1, 2017 1:18 PM
>> To: [email protected]
>> Subject: Validation and @PrePersist
>>
>> 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
>