RE: Query using foreign objects

From: Dave Merrin (dmerri..pasystems.co.uk)
Date: Tue Feb 07 2006 - 11:20:03 EST

  • Next message: Andrus Adamchik: "Re: Query using foreign objects"

    Hi Andrus,

    This is not for retrieving the primary key. It is for using the primary key
    in an expression.

    If the primary key is generated by the database how can I possibly be
    responsible for setting it?

    Dave

    > -----Original Message-----
    > From: Andrus Adamchik [mailto:andru..bjectstyle.org]
    > Sent: 07 February 2006 16:12
    > To: cayenne-use..bjectstyle.org
    > Subject: Re: Query using foreign objects
    >
    >
    >
    > I was wrong - sorry for confusion. If you map a PK column as an
    > ObjAttribute, it is your responsibility to set the value of this
    > property before commit. This is consistent in Cayenne, whether the
    > column is generated or not. If you need *read-only* access to the id
    > value, you should use DataObjectUtils instead (possibly with a
    > manually created getter in the data object subclass). So current
    > Cayenne validation behavior is correct.
    >
    > Andrus
    >
    >
    >
    > On Feb 6, 2006, at 1:10 PM, Andrus Adamchik wrote:
    > > Good point. This looks like a bug. Could you open a bug report for
    > > that?
    > >
    > > Thanks
    > > Andrus
    > >
    > >
    > > On Feb 6, 2006, at 12:00 PM, Dave Merrin wrote:
    > >
    > >> Hi,
    > >>
    > >> I've had a look through some more Cayenne documentation and some
    > >> of the
    > >> source code. I discovered CayenneDataObject validation. I see I
    > >> can add my
    > >> own validation but I don't just want to wipe out all of the cayenne
    > >> validation by not calling the super implementation.
    > >>
    > >> I see in the Cayenne implementation the ObjAttributes are iterated
    > >> through,
    > >> getting the mapped DbAttribute and checking if the attribute is
    > >> mandatory.
    > >> Could an additional check be done at this point to check if the
    > >> DbAttribute
    > >> is generated before adding it to the failure list?
    > >>
    > >> Here is the code I am on about:
    > >>
    > >> Map failedDbAttributes = null;
    > >>
    > >> Iterator attributes = objEntity.getAttributes().iterator();
    > >> while (attributes.hasNext()) {
    > >> ObjAttribute objAttribute = (ObjAttribute)
    > >> attributes.next();
    > >> DbAttribute dbAttribute = objAttribute.getDbAttribute();
    > >>
    > >> Object value =
    > >> this.readPropertyDirectly(objAttribute.getName());
    > >> if (dbAttribute.isMandatory()) {
    > >> ValidationFailure failure =
    > >> BeanValidationFailure.validateNotNull(
    > >> this,
    > >> objAttribute.getName(),
    > >> value);
    > >>
    > >> if (failure != null) {
    > >>
    > >> if (failedDbAttributes == null) {
    > >> failedDbAttributes = new HashMap();
    > >> }
    > >>
    > >> failedDbAttributes.put(dbAttribute.getName(),
    > >> failure);
    > >> continue;
    > >> }
    > >> }
    > >>
    > >> Cheers,
    > >>
    > >> Dave
    > >>> -----Original Message-----
    > >>> From: Dave Merrin [mailto:dmerri..pasystems.co.uk]
    > >>> Sent: 06 February 2006 09:04
    > >>> To: cayenne-use..bjectstyle.org
    > >>> Subject: Query using foreign objects
    > >>>
    > >>>
    > >>> Hi,
    > >>>
    > >>> I have tried mapping an ObjEntity to to DBEntity to allow me to
    > >>> use primary
    > >>> keys in an expression. This works for the expression but creates
    > >>> a new
    > >>> problem. My primary key is an identity hence it is generated by
    > >>> the database
    > >>> (and marked as isGenerated=true in the mapping file).
    > >>> Unfortunately mapping
    > >>> the ObjEntity to the DBEntity makes Cayenne think I have to set
    > >>> primary key
    > >>> when creating a new record in the database.
    > >>>
    > >>> Is this a bug?
    > >>>
    > >>> As an alternative I tried using the db: prefix but this didn't
    > >>> seem to work
    > >>> across relationships.
    > >>>
    > >>> Is there any way to create expressions using primary keys?
    > >>>
    > >>> Cheers,
    > >>>
    > >>> Dave
    > >
    > >
    >



    This archive was generated by hypermail 2.0.0 : Tue Feb 07 2006 - 11:21:52 EST