Posted on 2008-11-01 10:10
Neil's NoteBook 阅读(81)
评论(0) 编辑 收藏
It is occasionally useful to be able to take a graph of persistent instances
and make them persistent in a different datastore, without regenerating
identifier values.
//retrieve a cat from one database
Session session1 = factory1.openSession();
Transaction tx1 = session1.beginTransaction();
Cat cat = session1.get(Cat.class, catId);
tx1.commit();
session1.close();
//reconcile with a second database
Session session2 = factory2.openSession();
Transaction tx2 = session2.beginTransaction();
session2.replicate(cat, ReplicationMode.LATEST_VERSION);
tx2.commit();
session2.close();
The ReplicationMode
determines how replicate()
will deal with conflicts with existing rows in
the database.
-
ReplicationMode.IGNORE
- ignore the object when
there is an existing database row with the same identifier
-
ReplicationMode.OVERWRITE
- overwrite any existing
database row with the same identifier
-
ReplicationMode.EXCEPTION
- throw an exception if
there is an existing database row with the same identifier
-
ReplicationMode.LATEST_VERSION
- overwrite the row
if its version number is earlier than the version number of the object, or
ignore the object otherwise
Usecases for this feature include reconciling data entered into different
database instances, upgrading system configuration information during product
upgrades, rolling back changes made during non-ACID transactions and more.