Re: How do I get a record for non integer pk?

From: Malcolm Edgar (malcolm.edga..mail.com)
Date: Wed May 16 2007 - 20:03:02 EDT

  • Next message: Kevin Menard: "Should localObject() traverse the whole graph?"

    Hi Frank,

    this is more of a Click issue than a Cayenne issue. So the Click forum
    is would be a better place to raise it.

    In our applications we use java.lang.Long for the DataObject primary
    key values, mapping to a MySQL BIGINT. There is an outstanding task
    to relax the primary key type to support strings, this might get
    through into the Click 1.3 release.

    regards Malcolm Edgar

    On 5/17/07, Andrus Adamchik <andru..bjectstyle.org> wrote:
    > I think you are right. Click CayenneForm IIRC does not support non-
    > int PK's. Your stack confirms that:
    >
    > >>> at org.objectstyle.cayenne.DataObjectUtils.intPKForObject
    > >>> (DataObjectUtils.java:93)
    > >>> at net.sf.click.extras.cayenne.CayenneForm.setDataObject
    > >>> (CayenneForm.java:335)
    >
    >
    > Andrus
    >
    > On May 16, 2007, at 8:23 PM, Frank wrote:
    >
    > > I think it has something to do with Click CayenneForm
    > > I changed CayenneForm to Form and it works.
    > >
    > > Seems CayenneForm is tring to fetch my int id
    > >
    > > Frank
    > > ----- Original Message ----- From: "Andrus Adamchik"
    > > <andru..bjectstyle.org>
    > > To: <use..ayenne.apache.org>
    > > Sent: Wednesday, May 16, 2007 1:17 PM
    > > Subject: Re: How do I get a record for non integer pk?
    > >
    > >
    > >> These two lines are not the same:
    > >>> at org.objectstyle.cayenne.DataObjectUtils.intPKForObject
    > >>> (DataObjectUtils.java:93)
    > >>>> s = (System) DataObjectUtils.objectForPK(context, System.class,
    > >>>> name);
    > >> So now you are talking about a different problem. To fix your
    > >> latest problem use "pkForObject" instead of "intPKForObject"....
    > >> Andrus
    > >> On May 16, 2007, at 8:11 PM, Frank wrote:
    > >>> Does it have someting to do with the System name? reserved word?
    > >>>
    > >>> Class org.objectstyle.cayenne.CayenneRuntimeException
    > >>> Message [v.1.2.3 May 6 2007] PK is not a number:
    > >>> <ObjectId:System, System=AIX>
    > >>> org.objectstyle.cayenne.CayenneRuntimeException: [v.1.2.3 May 6
    > >>> 2007] PK is not a number: <ObjectId:System, System=AIX>
    > >>> at org.objectstyle.cayenne.DataObjectUtils.intPKForObject
    > >>> (DataObjectUtils.java:93)
    > >>> at net.sf.click.extras.cayenne.CayenneForm.setDataObject
    > >>> (CayenneForm.java:335)
    > >>> at stemc.page.EditSystemPage.getRecord(EditSystemPage.java:41)
    > >>> at stemc.page.EditSystemPage.onGet(EditSystemPage.java:71)
    > >>>
    > >>> Thanks
    > >>>
    > >>> Frank
    > >>>
    > >>>
    > >>> ----- Original Message ----- From: "Bryan Lewis"
    > >>> <brya..aine.rr.com>
    > >>> To: <use..ayenne.apache.org>
    > >>> Sent: Wednesday, May 16, 2007 1:01 PM
    > >>> Subject: Re: How do I get a record for non integer pk?
    > >>>
    > >>>
    > >>>> We use that objectForPK() method routinely with a String key
    > >>>> and haven't
    > >>>> had any problems.
    > >>>> What do you mean by "not working"? Is it throwing a
    > >>>> CayenneRuntimeException?
    > >>>>
    > >>>>
    > >>>> Frank wrote:
    > >>>>> Hello,
    > >>>>>
    > >>>>> The code below is not working, as it expects the PK to be integer.
    > >>>>> There is only one String field in the table defined as a pk.
    > >>>>>
    > >>>>> Thanks
    > >>>>>
    > >>>>> Frank
    > >>>>>
    > >>>>> private void getRecord(String name) {
    > >>>>> DataContext context = DataContext.getThreadDataContext();
    > >>>>> System s = new System();
    > >>>>> s = (System) DataObjectUtils.objectForPK(context,
    > >>>>> System.class, name);
    > >>>>> form.setDataObject(s);
    > >>>>> }
    > >>>>>
    > >>>>
    > >>>
    > >>>
    > >>
    > >
    >
    >



    This archive was generated by hypermail 2.0.0 : Wed May 16 2007 - 20:03:41 EDT