Red Hat Training
A Red Hat training course is available for Red Hat JBoss Web Server
11.9. 異なる二つのデータストア間でのオブジェクトのレプリケーション
永続インスタンスのグラフを別のデータストアに永続化する場合に、識別子の値を再生成せずにすむと便利な場合があります。
//retrieve a cat from one database Session session1 = factory1.openSession(); Transaction tx1 = session1.beginTransaction(); Cat 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();
データベースに既存の行がある場合、
replicate()
が衝突をどのように扱うかを ReplicationMode
で指定します。
ReplicationMode.IGNORE
:同じ識別子を持つ行がデータベースに存在するなら、そのオブジェクトを無視します。ReplicationMode.OVERWRITE
:同じ識別子を持つ既存の行をすべて上書きします。ReplicationMode.EXCEPTION
:同じ識別子を持つ行がデータベースに存在する場合、例外を投げます。ReplicationMode.LATEST_VERSION
:行に保存されているバージョン番号が、引数のオブジェクトのバージョン番号より古い場合、その行を上書きします。
次のようなケースで、この機能を使用します。異なるデータベースインスタンスに入れられたデータの同期、製品更新時におけるシステム設定情報の更新、非 ACID トランザクションのなかで加えられた変更のロールバックなどです。