Yeah, I guess PostAdd is the right callback to init new object defaults. We are rewriting the docs for 3.1. May need to clarify it there.
(and sorry for the late reply). On Oct 10, 2012, at 3:17 PM, Ramiro Aparicio <[email protected]> wrote: > Umm we found the same pattern some time ago, and just moved our default > values to onPostAdd, and I that is working fine for us, but I am not sure if > we are using it with mandatory fields. > > El 10/10/2012 13:42, [email protected] escribió: >> Does anybody have any news on this, please ? >> Thanks. >> >> ---------------------------- Original Message ---------------------------- >> Subject: Re: 3.1B1 Validation Exception >> Date: Thu, September 20, 2012 11:27 >> -------------------------------------------------------------------------- >> >> Not sure how to submit the example, but here goes: >> >> 1. TestMap.map.xml >> >> <?xml version="1.0" encoding="utf-8"?> >> <data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap >> http://cayenne.apache.org/schema/3.0/modelMap.xsd" >> project-version="6"> >> <property name="defaultPackage" value="test.tables"/> >> <db-entity name="DOCUMENTS"> >> <db-attribute name="CLEINT_NO" type="VARCHAR" isMandatory="true" >> length="50"/> >> <db-attribute name="DOC_DATE" type="TIMESTAMP" >> isMandatory="true"/> >> <db-attribute name="DOC_ID" type="BIGINT" isPrimaryKey="true" >> isGenerated="true" isMandatory="true"/> >> <db-attribute name="DOC_INFO" type="CLOB" isMandatory="true"/> >> <db-attribute name="DOC_REF_NO" type="VARCHAR" >> isMandatory="true" >> length="50"/> >> </db-entity> >> <obj-entity name="Document" className="test.tables.Document" >> dbEntityName="DOCUMENTS"> >> <obj-attribute name="client_id" type="java.lang.String" >> db-attribute-path="CLEINT_NO"/> >> <obj-attribute name="docDate" type="java.sql.Timestamp" >> db-attribute-path="DOC_DATE"/> >> <obj-attribute name="info" type="java.lang.String" >> db-attribute-path="DOC_INFO"/> >> <obj-attribute name="reference" type="java.lang.String" >> db-attribute-path="DOC_REF_NO"/> >> <pre-persist method-name="onPrePersist"/> >> </obj-entity> >> </data-map> >> >> -------------------------------------------------------------------- >> 2. Document class >> >> package test.tables; >> import java.sql.Timestamp; >> import test.tables.auto._Document; >> >> public class Document extends _Document >> { >> @Override >> protected void onPrePersist() >> { >> setDocDate( new Timestamp( System.currentTimeMillis() ) ); >> } >> } >> >> -------------------------------------------------------------------- >> 3. Test class >> >> import org.apache.cayenne.configuration.server.ServerRuntime; >> import test.tables.Document; >> >> public class Test >> { >> public static void main( String[] args ) >> { >> ServerRuntime server = new ServerRuntime("cayenne-Test.xml"); >> Document newDoc = server.getContext().newObject( Document.class ); >> >> newDoc.setClient_id( "12345" ); >> newDoc.setReference( "Test entry" ); >> newDoc.setInfo( "Some text about stuff." ); >> >> newDoc.getObjectContext().commitChanges(); >> } >> } >> >> -------------------------------------------------------------------- >> 4. The Exception >> >> Exception in thread "main" >> org.apache.cayenne.validation.ValidationException: [v.3.1B1 May 28 2012 >> 20:59:56] Validation failures: Validation failure for >> test.tables.Document.docDate: "docDate" is required. >> Validation failure for test.tables.Document.docDate: "docDate" is required. >> at >> org.apache.cayenne.access.ObjectStoreGraphDiff.validateAndCheckNoop(ObjectStoreGraphDiff.java:111) >> at >> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:806) >> at >> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:756) >> at Test.main(Test.java:16) >> >> -------------------------------------------------------------------- >> >> Thanks. >> >> >>> That doesn't sound like the right behavior. Can you create small example >>> that reproduces the problem? >>> >>> On Wednesday, September 19, 2012, wrote: >>> >>>> Is this a bug or am I doing something wrong ? >>>> >>>> I'm using 3.1B1 and getting a validation exception BEFORE my >>>> onPrePersist lifecycle method is called ? >>>> >>>> Caused by: org.apache.cayenne.validation.ValidationException: [v.3.1B1 >>>> May 28 2012 >> 20:59:56]org.apache.cayenne.access.ObjectStoreGraphDiff.validateAndCheckNoop(ObjectStoreGraphDiff.java:111) >>>> at >>>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:806) >>>> at >>>> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:756) >>>> >>>> >>>> The Cayenne Guide\Lifecycle Callbacks documentation indicates that >>>> PrePersist is called "Prior to commit (and prior to "validateFor*") >>>> within ObjectContext.commitChanges()" >>>> >>>> However from the above this doesn't seem to be the case ? >>>> >>>> So is this a bug or am I missing something ? >>>> >> >> > >
