cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: Creating new object in validateForInsert or validateForSave (are you certain?) (Oups...)
Date Mon, 22 Jan 2007 11:01:33 GMT
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
>>>>
>>>
>>
>
>


Mime
View raw message