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 <h...@godurkodi.is> 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, <do...@xsinet.co.za> <do...@xsinet.co.za> 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: user@cayenne.apache.org >> 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 >