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
>>>
>>
>
This archive was generated by hypermail 2.0.0 : Sun Jan 21 2007 - 16:11:15 EST