Re: Problems with CommitChanges and object PersistenceState

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Mon Jan 31 2005 - 09:24:07 EST

  • Next message: laila paganelli: "Re: Problems with CommitChanges and object PersistenceState"

    Hi Laila,

    Yeah, this might be a problem... Here is an easy solution - replace
    "pendingRawNews.setObjectId(key)" with
    "pendingRawNews.getObjectId().setReplacementId(key)"

    I guess in the future we need to handle this case somehow on Cayenne end,
    likely by throwing an exception...

    Andrus

    > Hi Andrus,
    >
    >
    > how you suggest, I read ObjectStore.objectsCommitted and now I'm
    > thinking the problem is in how i create and set the primary key.
    > How to set a new object's id?
    >
    > I report the entire code and the output logger (I have upgraded the
    > cayenne version to Cayenne 1.1)
    >
    > org.objectstyle.cayenne.access.DataContext context;
    > com.extrapola.scooter.dataModel.PendingRawNews pendingRawNews;
    > org.objectstyle.cayenne.ObjectId key;
    > org.objectstyle.cayenne.query.SQLTemplate query;
    > org.objectstyle.cayenne.DataRow dataRow;
    > java.lang.Integer id;
    >
    > context =
    > org.objectstyle.cayenne.access.DataContext.createDataContext();
    >
    > // generate new PK
    > query = new
    > org.objectstyle.cayenne.query.SQLTemplate( com.extrapola.scooter.dataModel.RawNews.class,
    > "SELECT #result('rawnws_seq.nextval'
    > 'java.lang.Integer' 'ID') FROM DUAL",
    > true);
    > query.setFetchingDataRows(true);
    > dataRow =
    > (org.objectstyle.cayenne.DataRow)context.performQuery(query).get(0);
    > id = (java.lang.Integer)dataRow.get("ID");
    >
    > // create a new ObjectId
    > key = new org.objectstyle.cayenne.ObjectId(
    > com.extrapola.scooter.dataModel.PendingRawNews.class,
    > com.extrapola.scooter.dataModel.PendingRawNews.ID_PK_COLUMN,
    > id.intValue());
    >
    > // create and register new object and setting new key
    > pendingRawNews =
    > (com.extrapola.scooter.dataModel.PendingRawNews)context.createAndRegisterNewObject(com.extrapola.scooter.dataModel.PendingRawNews.class);
    > pendingRawNews.setObjectId(key);
    > pendingRawNews.setInsertionDate(new java.util.Date());
    > context.commitChanges();
    >
    > System.out.println("-----------\n" + context.newObjects());
    >
    >
    >
    > INFO 2005-01-31 11:32:27,957 --- will run 1 query.
    > INFO 2005-01-31 11:32:29,653 --- transaction started.
    > INFO 2005-01-31 11:32:30,200 SELECT rawnws_seq.nextval AS ID FROM DUAL
    > INFO 2005-01-31 11:32:30,282 === returned 1 row. - took 81 ms.
    > INFO 2005-01-31 11:32:30,285 +++ transaction committed.
    > DEBUG 2005-01-31 11:32:30,441 Creating InsertBatchQuery for DbEntity
    > PNDRAWNWS INFO 2005-01-31 11:32:30,454 --- transaction started.
    > INFO 2005-01-31 11:32:30,455 --- will run 1 query.
    > INFO 2005-01-31 11:32:30,461 INSERT INTO PNDRAWNWS (ID,
    > INSERTION_DATE) VALUES (?, ?)
    > INFO 2005-01-31 11:32:30,463 [bind: 2066195, '2005-01-31 11:32:30.294']
    > INFO 2005-01-31 11:32:30,473 === updated 1 row.
    > INFO 2005-01-31 11:32:30,476 +++ transaction committed.
    > -----------
    > [{[ insertionDate => Mon Jan 31 11:32:30 CET 2005
    > ]<oid: com.extrapola.scooter.dataModel.PendingRawNews: <ID: 2066195>;
    > state: new>}
    > ]
    >
    > Thanks
    > Laila



    This archive was generated by hypermail 2.0.0 : Mon Jan 31 2005 - 09:24:09 EST