You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by do...@xsinet.co.za on 2012/10/10 13:42:40 UTC
Re: 3.1B1 Validation Exception
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 ?
>>
>
Re: 3.1B1 Validation Exception
Posted by Andrus Adamchik <an...@objectstyle.org>.
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 <ra...@prot-on.com> 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, dollj@xsinet.co.za 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 ?
>>>>
>>
>>
>
>
Re: 3.1B1 Validation Exception
Posted by Ramiro Aparicio <ra...@prot-on.com>.
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, dollj@xsinet.co.za 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 ?
>>>
>
>