[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] How to compare entities from two different databases and replace one with the other?
|
There is no public API for this. You could call down to the ObjectBuilder
and call the merge with your two objects directly.
saasira wrote:
>
> Thanks James for those useful tips; this API has helped me a lot.
>
> I think this eclipselink's change set API needs more civerage in the wiki
> so
> that other guys can benefit from it.
>
> It is also useful for audit logging purposes where just the changes made
> to
> the entity, but not the entire entity, needs to be logged.
>
>
> By the way, I would like know if there is any way to merge entities based
> on
> the object equality instead of the primary key equality;
> the reason being that when we compare entities from two data bases, most
> of
> the times, the primary keys (pseudo identities, usually numbers for easy
> mapping of references) will be different where as logically the entities
> are
> same based on some unique field(s).
>
> So, we had to selectively compare the unique fields for logical equality
> and
> then selectively copy all the fields from one entity of reference database
> to the other entity of the comparing database, carefully avoiding the copy
> of primary key. It would be very helpful, if there is any option to ask
> eclpselink to merge by logical equality rather than primary key equlity.
>
> Can you guys let me know if this is possible with eclipselink?
>
> Thanks and Regards,
> Samba
>
>
> On Wed, Apr 7, 2010 at 5:59 AM, James Sutherland
> <jamesssss@xxxxxxxxx>wrote:
>
>>
>> Assuming the objects have the same primary keys, you could read from one
>> and
>> call merge() into the other. This would merge any changes, or do nothing
>> if
>> no changes.
>>
>> There is a compareObjects() method on AbstractSession that will compare
>> two
>> objects and return if they match.
>>
>> If you get the UnitOfWork after merging you can get the
>> UnitOfWorkChangeSet
>> that contains the set of changes.
>>
>> There is also a compareForChange() method on ObjectBuilder that will
>> compare
>> two objects and build an ObjectChangeSet.
>>
>> Doing this for an entire database may take a while depending on the
>> database
>> size. You may be better off using lower level database utilities, or
>> just
>> drop the test db, and clone the reference.
>>
>>
>> saasira wrote:
>> >
>> > Hi all,
>> >
>> > I need to compare data in two databases, one a test db and the
>> other
>> > being reference db, and then patch the differences in the database that
>> is
>> > being compared from the
>> > data in the reference db.
>> >
>> > Can eclipselink detect changes between two entities, each loaded by
>> > a different entity manager?
>> >
>> > Can I use the eclipselink change tracking api ( merge the
>> comparable
>> > entity with reference entity manager and then invoke UnitOfWork.
>> > getUnitOfWorkChangeSet() or
>> > UnitOfWork.getCurrentChanges() ) for finding the differences
>> between
>> > the
>> > test entity and the reference enitity?
>> >
>> >
>> > I'm open to any other approach that can help me achieve this; even
>> > hibernate or openjpa is also ok to me!
>> >
>> > Thanks and Regards,
>> > Samba
>> >
>
>
-----
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
http://www.eclipse.org/eclipselink/
EclipseLink , http://www.oracle.com/technology/products/ias/toplink/
TopLink
Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink ,
http://wiki.oracle.com/page/TopLink TopLink
Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
http://www.nabble.com/EclipseLink-f26430.html EclipseLink
Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
--
View this message in context: http://old.nabble.com/How-to-compare-entities-from-two-different-databases-and-replace-one-with-the-other--tp28094979p28287882.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.