Re: creating/saving transient objects to database

From: Michael Lepine (mikelepin..mail.com)
Date: Fri Jun 22 2007 - 09:18:15 EDT

  • Next message: Andrus Adamchik: "Re: paged query slow when fetching big lists"

    Excellent. I will check this out.

    Thanks to all for the replies/suggestions.

    On 6/22/07, Michael Gentry <blacknex..mail.com> wrote:
    >
    > We had something similar here where a batch job needed to read a data file
    > and insert new records or update existing records (handle duplicates,
    > essentially). What we did was:
    >
    > * Read the data file, find the key data.
    > * Write and call a getFoo(dataContext, keys) method.
    > * The getFoo() method would query the database and if it found a record,
    > it
    > would return the Cayenne object to us. If no record was found, it would
    > create and register a new object in the DC and return the new object.
    > * Then we'd apply all the data in the data file to the object return by
    > getFoo().
    > * Then dataContext.commitChanges().
    > * Repeat until we processed all the data.
    >
    > Seemed to work pretty well and I think that approach would work for you,
    > too, most likely. In your case, your POJO is the equivalent of a record
    > in
    > our data file. This also frees you up from having to care about the
    > persistence state. You don't care. You have an object, apply the
    > changes,
    > commit.
    >
    > /dev/mrg
    >
    > PS. If relationships are involved, your getFoo() should create all the
    > objects for all of the required relationships if you have to
    > create/register
    > new objects (when there was no DB match). This way your main processing
    > code can just apply changes blindly without having to check if the
    > relationships exist.
    >
    >
    > On 6/21/07, Michael Lepine <mikelepin..mail.com> wrote:
    > >
    > > I've got a situation where I've got strict POJO objects that I'll need
    > to
    > > copy data from and into my generated Cayenne classes. My issue is that
    > > when
    > > I copy the data from the bean to the Cayenne class, I don't know whether
    > > the
    > > object exists or not. Thus, I create the Cayenne class instance using
    > > DataContext.newObject(). Obviously, when I call
    > DataContext.commitChanges
    > > (),
    > > an insert is being attempted on the corresponding table even if a record
    > > already exists in the database.
    > >
    > > Is there a way to create the Cayenne instance so that the persistent
    > layer
    > > will know to check whether the record exists and update it instead of
    > > always
    > > attempting an insert?
    > >
    > > Any help and guidance are appreciated.
    > >
    >



    This archive was generated by hypermail 2.0.0 : Fri Jun 22 2007 - 09:18:40 EDT