You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by "Alexander Lamb (dev)" <al...@mac.com> on 2007/01/21 18:49:40 UTC
Re: Creating new object in validateForInsert or validateForSave (are you certain?)
Hello, me again!
Are you certain it is possible to handle fetches and creations in
validateForInsert like this for example:
public void validateForInsert(ValidationResult validationResult)
{
Scope scope = Scope.scopeWithShortNameInContext(this.getShortName
(),this.getDataContext());
if(scope == null)
{
RegistryScope registryScope = new RegistryScope();
this.getDataContext().registerNewObject(registryScope);
registryScope.setShortName(this.getShortName());
registryScope.setScopeClass("REGISTRY");
registryScope.setName(this.getLongName());
registryScope.setRegistry(this);
}
}
I get a wonderfull index out of bounds deep in the cayenne classes:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:546)
at java.util.ArrayList.get(ArrayList.java:321)
at java.util.Collections$UnmodifiableList.get
(Collections.java:1155)
at
org.apache.cayenne.access.trans.SelectTranslator.appendQueryColumns
(SelectTranslator.java:400)
at
org.apache.cayenne.access.trans.SelectTranslator.buildResultColumns
(SelectTranslator.java:338)
at
org.apache.cayenne.access.trans.SelectTranslator.createSqlString
(SelectTranslator.java:113)
at
org.apache.cayenne.dba.mysql.MySQLSelectTranslator.createSqlString
(MySQLSelectTranslator.java:31)
at
org.apache.cayenne.access.trans.QueryAssembler.createStatement
(QueryAssembler.java:95)
at org.apache.cayenne.access.jdbc.SelectAction.performAction
(SelectAction.java:71)
at org.apache.cayenne.access.DataNodeQueryAction.runQuery
(DataNodeQueryAction.java:59)
at org.apache.cayenne.access.DataNode.performQueries
(DataNode.java:273)
at org.apache.cayenne.access.DataDomainQueryAction.runQuery
(DataDomainQueryAction.java:319)
at org.apache.cayenne.access.DataDomainQueryAction.access$000
(DataDomainQueryAction.java:60)
at org.apache.cayenne.access.DataDomainQueryAction
$1.transform(DataDomainQueryAction.java:291)
at org.apache.cayenne.access.DataDomain.runInTransaction
(DataDomain.java:820)
at
org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction
(DataDomainQueryAction.java:288)
at org.apache.cayenne.access.DataDomainQueryAction.execute
(DataDomainQueryAction.java:109)
at org.apache.cayenne.access.DataDomain.onQuery
(DataDomain.java:730)
at org.apache.cayenne.util.ObjectContextQueryAction.runQuery
(ObjectContextQueryAction.java:217)
at org.apache.cayenne.access.DataContextQueryAction.execute
(DataContextQueryAction.java:54)
at org.apache.cayenne.access.DataContext.onQuery
(DataContext.java:1386)
at org.apache.cayenne.access.DataContext.performQuery
(DataContext.java:1375)
at ch.rodano.role.model.Scope.scopeWithShortNameInContext
(Scope.java:18)
at ch.rodano.role.model.Registry.validateForInsert
(Registry.java:39)
On Jan 17, 2007, at 8:53 AM, Andrus Adamchik wrote:
> Hi Alex,
>
> Yes you can do that. Validation routine is executed before object
> changes are finalized, allowing arbitrary object operations to be
> performed during the validation.
>
> Andrus
>
>
> On Jan 17, 2007, at 12:07 AM, Alexander Lamb (dev) wrote:
>
>> Hello list,
>>
>> I am currently using Cayenne 2.0.
>>
>> I read it was possible to modify objects during a
>> validateForInsert or validateForSave call (e.g. not the same as
>> old WebObjects).
>>
>> What about creating a new object and inserting it in the
>> DataContext? Will it get saved at the same time?
>>
>> My problem is the following:
>>
>> I have an object which has a to-one relationship to another
>> object. That other object has to be created at the same time as
>> the first one. I would like to make it automatic so the user of
>> the library I am writing can simply create and insert the first
>> object and the second one will follow.
>>
>> To understand why I am creating two objects related one-to-one it
>> is because I have an entity which can be related (to-one) to
>> either one of four other entities. I am doing this instead of
>> modeling things with a class hierarchy since cayenne doesn't
>> support multiple tables class hierarchies.
>>
>> Thanks for any hints!
>>
>> Alex
>>
>
Re: Creating new object in validateForInsert or validateForSave (are you certain?) (Oups...)
Posted by Andrus Adamchik <an...@objectstyle.org>.
Yes, since 2.0.2 is synched from Apache, it is already there:
http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/cayenne/
cayenne-nodeps/2.0.2/
(1.2.2 requires assistance from Maven folks, so it is lagging behind)
Andrus
On Jan 22, 2007, at 11:39 PM, Alexander Lamb (dev) wrote:
> Ok, I was with version 2.0.1-incubating (with Maven). Is 2.0.2
> already available through Maven?
>
> On Jan 22, 2007, at 12:01 PM, Andrus Adamchik wrote:
>
>> Actually you may want to upgrade to 2.0.2 - you may be affected by
>> this bug that was fixed in the last release:
>>
>> https://issues.apache.org/cayenne/browse/CAY-712
>>
>> Andrus
>>
>>
>> On Jan 21, 2007, at 11:10 PM, Alexander Lamb (dev) wrote:
>>
>>> Well, it might be me... having trouble with a class hierarchy. So
>>> first I'll check that, then I'll be back with the
>>> validateForInsert :-)
>>>
>>> On Jan 21, 2007, at 6:49 PM, Alexander Lamb (dev) wrote:
>>>
>>>> Hello, me again!
>>>>
>>>> Are you certain it is possible to handle fetches and creations
>>>> in validateForInsert like this for example:
>>>>
>>>> public void validateForInsert(ValidationResult validationResult)
>>>> {
>>>> Scope scope = Scope.scopeWithShortNameInContext
>>>> (this.getShortName(),this.getDataContext());
>>>> if(scope == null)
>>>> {
>>>> RegistryScope registryScope = new RegistryScope();
>>>> this.getDataContext().registerNewObject(registryScope);
>>>> registryScope.setShortName(this.getShortName());
>>>> registryScope.setScopeClass("REGISTRY");
>>>> registryScope.setName(this.getLongName());
>>>> registryScope.setRegistry(this);
>>>> }
>>>> }
>>>>
>>>> I get a wonderfull index out of bounds deep in the cayenne classes:
>>>>
>>>> java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
>>>> at java.util.ArrayList.RangeCheck(ArrayList.java:546)
>>>> at java.util.ArrayList.get(ArrayList.java:321)
>>>> at java.util.Collections$UnmodifiableList.get
>>>> (Collections.java:1155)
>>>> at
>>>> org.apache.cayenne.access.trans.SelectTranslator.appendQueryColumns
>>>> (SelectTranslator.java:400)
>>>> at
>>>> org.apache.cayenne.access.trans.SelectTranslator.buildResultColumns
>>>> (SelectTranslator.java:338)
>>>> at
>>>> org.apache.cayenne.access.trans.SelectTranslator.createSqlString
>>>> (SelectTranslator.java:113)
>>>> at
>>>> org.apache.cayenne.dba.mysql.MySQLSelectTranslator.createSqlString(
>>>> MySQLSelectTranslator.java:31)
>>>> at
>>>> org.apache.cayenne.access.trans.QueryAssembler.createStatement
>>>> (QueryAssembler.java:95)
>>>> at
>>>> org.apache.cayenne.access.jdbc.SelectAction.performAction
>>>> (SelectAction.java:71)
>>>> at org.apache.cayenne.access.DataNodeQueryAction.runQuery
>>>> (DataNodeQueryAction.java:59)
>>>> at org.apache.cayenne.access.DataNode.performQueries
>>>> (DataNode.java:273)
>>>> at
>>>> org.apache.cayenne.access.DataDomainQueryAction.runQuery
>>>> (DataDomainQueryAction.java:319)
>>>> at org.apache.cayenne.access.DataDomainQueryAction.access
>>>> $000(DataDomainQueryAction.java:60)
>>>> at org.apache.cayenne.access.DataDomainQueryAction
>>>> $1.transform(DataDomainQueryAction.java:291)
>>>> at org.apache.cayenne.access.DataDomain.runInTransaction
>>>> (DataDomain.java:820)
>>>> at
>>>> org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransacti
>>>> on(DataDomainQueryAction.java:288)
>>>> at
>>>> org.apache.cayenne.access.DataDomainQueryAction.execute
>>>> (DataDomainQueryAction.java:109)
>>>> at org.apache.cayenne.access.DataDomain.onQuery
>>>> (DataDomain.java:730)
>>>> at
>>>> org.apache.cayenne.util.ObjectContextQueryAction.runQuery
>>>> (ObjectContextQueryAction.java:217)
>>>> at
>>>> org.apache.cayenne.access.DataContextQueryAction.execute
>>>> (DataContextQueryAction.java:54)
>>>> at org.apache.cayenne.access.DataContext.onQuery
>>>> (DataContext.java:1386)
>>>> at org.apache.cayenne.access.DataContext.performQuery
>>>> (DataContext.java:1375)
>>>> at ch.rodano.role.model.Scope.scopeWithShortNameInContext
>>>> (Scope.java:18)
>>>> at ch.rodano.role.model.Registry.validateForInsert
>>>> (Registry.java:39)
>>>>
>>>>
>>>> On Jan 17, 2007, at 8:53 AM, Andrus Adamchik wrote:
>>>>
>>>>> Hi Alex,
>>>>>
>>>>> Yes you can do that. Validation routine is executed before
>>>>> object changes are finalized, allowing arbitrary object
>>>>> operations to be performed during the validation.
>>>>>
>>>>> Andrus
>>>>>
>>>>>
>>>>> On Jan 17, 2007, at 12:07 AM, Alexander Lamb (dev) wrote:
>>>>>
>>>>>> Hello list,
>>>>>>
>>>>>> I am currently using Cayenne 2.0.
>>>>>>
>>>>>> I read it was possible to modify objects during a
>>>>>> validateForInsert or validateForSave call (e.g. not the same
>>>>>> as old WebObjects).
>>>>>>
>>>>>> What about creating a new object and inserting it in the
>>>>>> DataContext? Will it get saved at the same time?
>>>>>>
>>>>>> My problem is the following:
>>>>>>
>>>>>> I have an object which has a to-one relationship to another
>>>>>> object. That other object has to be created at the same time
>>>>>> as the first one. I would like to make it automatic so the
>>>>>> user of the library I am writing can simply create and insert
>>>>>> the first object and the second one will follow.
>>>>>>
>>>>>> To understand why I am creating two objects related one-to-one
>>>>>> it is because I have an entity which can be related (to-one)
>>>>>> to either one of four other entities. I am doing this instead
>>>>>> of modeling things with a class hierarchy since cayenne
>>>>>> doesn't support multiple tables class hierarchies.
>>>>>>
>>>>>> Thanks for any hints!
>>>>>>
>>>>>> Alex
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>
Re: Creating new object in validateForInsert or validateForSave (are you certain?) (Oups...)
Posted by "Alexander Lamb (dev)" <al...@mac.com>.
Ok, I was with version 2.0.1-incubating (with Maven). Is 2.0.2
already available through Maven?
On Jan 22, 2007, at 12:01 PM, Andrus Adamchik wrote:
> Actually you may want to upgrade to 2.0.2 - you may be affected by
> this bug that was fixed in the last release:
>
> https://issues.apache.org/cayenne/browse/CAY-712
>
> Andrus
>
>
> On Jan 21, 2007, at 11:10 PM, Alexander Lamb (dev) wrote:
>
>> Well, it might be me... having trouble with a class hierarchy. So
>> first I'll check that, then I'll be back with the
>> validateForInsert :-)
>>
>> On Jan 21, 2007, at 6:49 PM, Alexander Lamb (dev) wrote:
>>
>>> Hello, me again!
>>>
>>> Are you certain it is possible to handle fetches and creations in
>>> validateForInsert like this for example:
>>>
>>> public void validateForInsert(ValidationResult validationResult)
>>> {
>>> Scope scope = Scope.scopeWithShortNameInContext
>>> (this.getShortName(),this.getDataContext());
>>> if(scope == null)
>>> {
>>> RegistryScope registryScope = new RegistryScope();
>>> this.getDataContext().registerNewObject(registryScope);
>>> registryScope.setShortName(this.getShortName());
>>> registryScope.setScopeClass("REGISTRY");
>>> registryScope.setName(this.getLongName());
>>> registryScope.setRegistry(this);
>>> }
>>> }
>>>
>>> I get a wonderfull index out of bounds deep in the cayenne classes:
>>>
>>> java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
>>> at java.util.ArrayList.RangeCheck(ArrayList.java:546)
>>> at java.util.ArrayList.get(ArrayList.java:321)
>>> at java.util.Collections$UnmodifiableList.get
>>> (Collections.java:1155)
>>> at
>>> org.apache.cayenne.access.trans.SelectTranslator.appendQueryColumns(
>>> SelectTranslator.java:400)
>>> at
>>> org.apache.cayenne.access.trans.SelectTranslator.buildResultColumns(
>>> SelectTranslator.java:338)
>>> at
>>> org.apache.cayenne.access.trans.SelectTranslator.createSqlString
>>> (SelectTranslator.java:113)
>>> at
>>> org.apache.cayenne.dba.mysql.MySQLSelectTranslator.createSqlString
>>> (MySQLSelectTranslator.java:31)
>>> at
>>> org.apache.cayenne.access.trans.QueryAssembler.createStatement
>>> (QueryAssembler.java:95)
>>> at
>>> org.apache.cayenne.access.jdbc.SelectAction.performAction
>>> (SelectAction.java:71)
>>> at org.apache.cayenne.access.DataNodeQueryAction.runQuery
>>> (DataNodeQueryAction.java:59)
>>> at org.apache.cayenne.access.DataNode.performQueries
>>> (DataNode.java:273)
>>> at
>>> org.apache.cayenne.access.DataDomainQueryAction.runQuery
>>> (DataDomainQueryAction.java:319)
>>> at org.apache.cayenne.access.DataDomainQueryAction.access
>>> $000(DataDomainQueryAction.java:60)
>>> at org.apache.cayenne.access.DataDomainQueryAction
>>> $1.transform(DataDomainQueryAction.java:291)
>>> at org.apache.cayenne.access.DataDomain.runInTransaction
>>> (DataDomain.java:820)
>>> at
>>> org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransactio
>>> n(DataDomainQueryAction.java:288)
>>> at org.apache.cayenne.access.DataDomainQueryAction.execute
>>> (DataDomainQueryAction.java:109)
>>> at org.apache.cayenne.access.DataDomain.onQuery
>>> (DataDomain.java:730)
>>> at
>>> org.apache.cayenne.util.ObjectContextQueryAction.runQuery
>>> (ObjectContextQueryAction.java:217)
>>> at
>>> org.apache.cayenne.access.DataContextQueryAction.execute
>>> (DataContextQueryAction.java:54)
>>> at org.apache.cayenne.access.DataContext.onQuery
>>> (DataContext.java:1386)
>>> at org.apache.cayenne.access.DataContext.performQuery
>>> (DataContext.java:1375)
>>> at ch.rodano.role.model.Scope.scopeWithShortNameInContext
>>> (Scope.java:18)
>>> at ch.rodano.role.model.Registry.validateForInsert
>>> (Registry.java:39)
>>>
>>>
>>> On Jan 17, 2007, at 8:53 AM, Andrus Adamchik wrote:
>>>
>>>> Hi Alex,
>>>>
>>>> Yes you can do that. Validation routine is executed before
>>>> object changes are finalized, allowing arbitrary object
>>>> operations to be performed during the validation.
>>>>
>>>> Andrus
>>>>
>>>>
>>>> On Jan 17, 2007, at 12:07 AM, Alexander Lamb (dev) wrote:
>>>>
>>>>> Hello list,
>>>>>
>>>>> I am currently using Cayenne 2.0.
>>>>>
>>>>> I read it was possible to modify objects during a
>>>>> validateForInsert or validateForSave call (e.g. not the same as
>>>>> old WebObjects).
>>>>>
>>>>> What about creating a new object and inserting it in the
>>>>> DataContext? Will it get saved at the same time?
>>>>>
>>>>> My problem is the following:
>>>>>
>>>>> I have an object which has a to-one relationship to another
>>>>> object. That other object has to be created at the same time as
>>>>> the first one. I would like to make it automatic so the user of
>>>>> the library I am writing can simply create and insert the first
>>>>> object and the second one will follow.
>>>>>
>>>>> To understand why I am creating two objects related one-to-one
>>>>> it is because I have an entity which can be related (to-one) to
>>>>> either one of four other entities. I am doing this instead of
>>>>> modeling things with a class hierarchy since cayenne doesn't
>>>>> support multiple tables class hierarchies.
>>>>>
>>>>> Thanks for any hints!
>>>>>
>>>>> Alex
>>>>>
>>>>
>>>
>>
>>
>
Re: Creating new object in validateForInsert or validateForSave (are you certain?) (Oups...)
Posted by Andrus Adamchik <an...@objectstyle.org>.
Actually you may want to upgrade to 2.0.2 - you may be affected by
this bug that was fixed in the last release:
https://issues.apache.org/cayenne/browse/CAY-712
Andrus
On Jan 21, 2007, at 11:10 PM, Alexander Lamb (dev) wrote:
> Well, it might be me... having trouble with a class hierarchy. So
> first I'll check that, then I'll be back with the
> validateForInsert :-)
>
> On Jan 21, 2007, at 6:49 PM, Alexander Lamb (dev) wrote:
>
>> Hello, me again!
>>
>> Are you certain it is possible to handle fetches and creations in
>> validateForInsert like this for example:
>>
>> public void validateForInsert(ValidationResult validationResult)
>> {
>> Scope scope = Scope.scopeWithShortNameInContext
>> (this.getShortName(),this.getDataContext());
>> if(scope == null)
>> {
>> RegistryScope registryScope = new RegistryScope();
>> this.getDataContext().registerNewObject(registryScope);
>> registryScope.setShortName(this.getShortName());
>> registryScope.setScopeClass("REGISTRY");
>> registryScope.setName(this.getLongName());
>> registryScope.setRegistry(this);
>> }
>> }
>>
>> I get a wonderfull index out of bounds deep in the cayenne classes:
>>
>> java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
>> at java.util.ArrayList.RangeCheck(ArrayList.java:546)
>> at java.util.ArrayList.get(ArrayList.java:321)
>> at java.util.Collections$UnmodifiableList.get
>> (Collections.java:1155)
>> at
>> org.apache.cayenne.access.trans.SelectTranslator.appendQueryColumns
>> (SelectTranslator.java:400)
>> at
>> org.apache.cayenne.access.trans.SelectTranslator.buildResultColumns
>> (SelectTranslator.java:338)
>> at
>> org.apache.cayenne.access.trans.SelectTranslator.createSqlString
>> (SelectTranslator.java:113)
>> at
>> org.apache.cayenne.dba.mysql.MySQLSelectTranslator.createSqlString
>> (MySQLSelectTranslator.java:31)
>> at
>> org.apache.cayenne.access.trans.QueryAssembler.createStatement
>> (QueryAssembler.java:95)
>> at
>> org.apache.cayenne.access.jdbc.SelectAction.performAction
>> (SelectAction.java:71)
>> at org.apache.cayenne.access.DataNodeQueryAction.runQuery
>> (DataNodeQueryAction.java:59)
>> at org.apache.cayenne.access.DataNode.performQueries
>> (DataNode.java:273)
>> at org.apache.cayenne.access.DataDomainQueryAction.runQuery
>> (DataDomainQueryAction.java:319)
>> at org.apache.cayenne.access.DataDomainQueryAction.access
>> $000(DataDomainQueryAction.java:60)
>> at org.apache.cayenne.access.DataDomainQueryAction
>> $1.transform(DataDomainQueryAction.java:291)
>> at org.apache.cayenne.access.DataDomain.runInTransaction
>> (DataDomain.java:820)
>> at
>> org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction
>> (DataDomainQueryAction.java:288)
>> at org.apache.cayenne.access.DataDomainQueryAction.execute
>> (DataDomainQueryAction.java:109)
>> at org.apache.cayenne.access.DataDomain.onQuery
>> (DataDomain.java:730)
>> at
>> org.apache.cayenne.util.ObjectContextQueryAction.runQuery
>> (ObjectContextQueryAction.java:217)
>> at org.apache.cayenne.access.DataContextQueryAction.execute
>> (DataContextQueryAction.java:54)
>> at org.apache.cayenne.access.DataContext.onQuery
>> (DataContext.java:1386)
>> at org.apache.cayenne.access.DataContext.performQuery
>> (DataContext.java:1375)
>> at ch.rodano.role.model.Scope.scopeWithShortNameInContext
>> (Scope.java:18)
>> at ch.rodano.role.model.Registry.validateForInsert
>> (Registry.java:39)
>>
>>
>> On Jan 17, 2007, at 8:53 AM, Andrus Adamchik wrote:
>>
>>> Hi Alex,
>>>
>>> Yes you can do that. Validation routine is executed before object
>>> changes are finalized, allowing arbitrary object operations to be
>>> performed during the validation.
>>>
>>> Andrus
>>>
>>>
>>> On Jan 17, 2007, at 12:07 AM, Alexander Lamb (dev) wrote:
>>>
>>>> Hello list,
>>>>
>>>> I am currently using Cayenne 2.0.
>>>>
>>>> I read it was possible to modify objects during a
>>>> validateForInsert or validateForSave call (e.g. not the same as
>>>> old WebObjects).
>>>>
>>>> What about creating a new object and inserting it in the
>>>> DataContext? Will it get saved at the same time?
>>>>
>>>> My problem is the following:
>>>>
>>>> I have an object which has a to-one relationship to another
>>>> object. That other object has to be created at the same time as
>>>> the first one. I would like to make it automatic so the user of
>>>> the library I am writing can simply create and insert the first
>>>> object and the second one will follow.
>>>>
>>>> To understand why I am creating two objects related one-to-one
>>>> it is because I have an entity which can be related (to-one) to
>>>> either one of four other entities. I am doing this instead of
>>>> modeling things with a class hierarchy since cayenne doesn't
>>>> support multiple tables class hierarchies.
>>>>
>>>> Thanks for any hints!
>>>>
>>>> Alex
>>>>
>>>
>>
>
>
Re: Creating new object in validateForInsert or validateForSave (are you certain?) (Oups...)
Posted by "Alexander Lamb (dev)" <al...@mac.com>.
Well, it might be me... having trouble with a class hierarchy. So
first I'll check that, then I'll be back with the validateForInsert :-)
On Jan 21, 2007, at 6:49 PM, Alexander Lamb (dev) wrote:
> Hello, me again!
>
> Are you certain it is possible to handle fetches and creations in
> validateForInsert like this for example:
>
> public void validateForInsert(ValidationResult validationResult)
> {
> Scope scope = Scope.scopeWithShortNameInContext
> (this.getShortName(),this.getDataContext());
> if(scope == null)
> {
> RegistryScope registryScope = new RegistryScope();
> this.getDataContext().registerNewObject(registryScope);
> registryScope.setShortName(this.getShortName());
> registryScope.setScopeClass("REGISTRY");
> registryScope.setName(this.getLongName());
> registryScope.setRegistry(this);
> }
> }
>
> I get a wonderfull index out of bounds deep in the cayenne classes:
>
> java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
> at java.util.ArrayList.RangeCheck(ArrayList.java:546)
> at java.util.ArrayList.get(ArrayList.java:321)
> at java.util.Collections$UnmodifiableList.get
> (Collections.java:1155)
> at
> org.apache.cayenne.access.trans.SelectTranslator.appendQueryColumns
> (SelectTranslator.java:400)
> at
> org.apache.cayenne.access.trans.SelectTranslator.buildResultColumns
> (SelectTranslator.java:338)
> at
> org.apache.cayenne.access.trans.SelectTranslator.createSqlString
> (SelectTranslator.java:113)
> at
> org.apache.cayenne.dba.mysql.MySQLSelectTranslator.createSqlString
> (MySQLSelectTranslator.java:31)
> at
> org.apache.cayenne.access.trans.QueryAssembler.createStatement
> (QueryAssembler.java:95)
> at org.apache.cayenne.access.jdbc.SelectAction.performAction
> (SelectAction.java:71)
> at org.apache.cayenne.access.DataNodeQueryAction.runQuery
> (DataNodeQueryAction.java:59)
> at org.apache.cayenne.access.DataNode.performQueries
> (DataNode.java:273)
> at org.apache.cayenne.access.DataDomainQueryAction.runQuery
> (DataDomainQueryAction.java:319)
> at org.apache.cayenne.access.DataDomainQueryAction.access
> $000(DataDomainQueryAction.java:60)
> at org.apache.cayenne.access.DataDomainQueryAction
> $1.transform(DataDomainQueryAction.java:291)
> at org.apache.cayenne.access.DataDomain.runInTransaction
> (DataDomain.java:820)
> at
> org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(
> DataDomainQueryAction.java:288)
> at org.apache.cayenne.access.DataDomainQueryAction.execute
> (DataDomainQueryAction.java:109)
> at org.apache.cayenne.access.DataDomain.onQuery
> (DataDomain.java:730)
> at org.apache.cayenne.util.ObjectContextQueryAction.runQuery
> (ObjectContextQueryAction.java:217)
> at org.apache.cayenne.access.DataContextQueryAction.execute
> (DataContextQueryAction.java:54)
> at org.apache.cayenne.access.DataContext.onQuery
> (DataContext.java:1386)
> at org.apache.cayenne.access.DataContext.performQuery
> (DataContext.java:1375)
> at ch.rodano.role.model.Scope.scopeWithShortNameInContext
> (Scope.java:18)
> at ch.rodano.role.model.Registry.validateForInsert
> (Registry.java:39)
>
>
> On Jan 17, 2007, at 8:53 AM, Andrus Adamchik wrote:
>
>> Hi Alex,
>>
>> Yes you can do that. Validation routine is executed before object
>> changes are finalized, allowing arbitrary object operations to be
>> performed during the validation.
>>
>> Andrus
>>
>>
>> On Jan 17, 2007, at 12:07 AM, Alexander Lamb (dev) wrote:
>>
>>> Hello list,
>>>
>>> I am currently using Cayenne 2.0.
>>>
>>> I read it was possible to modify objects during a
>>> validateForInsert or validateForSave call (e.g. not the same as
>>> old WebObjects).
>>>
>>> What about creating a new object and inserting it in the
>>> DataContext? Will it get saved at the same time?
>>>
>>> My problem is the following:
>>>
>>> I have an object which has a to-one relationship to another
>>> object. That other object has to be created at the same time as
>>> the first one. I would like to make it automatic so the user of
>>> the library I am writing can simply create and insert the first
>>> object and the second one will follow.
>>>
>>> To understand why I am creating two objects related one-to-one it
>>> is because I have an entity which can be related (to-one) to
>>> either one of four other entities. I am doing this instead of
>>> modeling things with a class hierarchy since cayenne doesn't
>>> support multiple tables class hierarchies.
>>>
>>> Thanks for any hints!
>>>
>>> Alex
>>>
>>
>