cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Gentry" <>
Subject Re: creating/saving transient objects to database
Date Fri, 22 Jun 2007 13:00:20 GMT
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
* 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,


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

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message