Re: Creating new object in validateForInsert or validateForSave (are you certain?) (Oups...)

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Mon Jan 22 2007 - 06:01:33 EST

  • Next message: Michael Gentry: "Re: help on relationship"

    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
    >>>>
    >>>
    >>
    >
    >



    This archive was generated by hypermail 2.0.0 : Mon Jan 22 2007 - 06:02:32 EST