Neil的备忘录

just do it
posts - 66, comments - 8, trackbacks - 0, articles - 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. 


只有注册用户登录后才能发表评论。


网站导航: