Il est occasionnellement utile de pouvoir prendre un graphe d'instances persistantes et de les rendre persistantes dans un entrepôt différent, sans regénérer les valeurs des identifiants.
//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();
Le ReplicationMode
détermine comment replicate()
traitera les conflits avec les lignes existantes dans la base de données.
ReplicationMode.IGNORE
- ignore l'objet s'il y a une ligne existante dans la base de données avec le même identifiant
ReplicationMode.OVERWRITE
- écrase n'importe quelle ligne existante dans la base de données avec le même identifiant
ReplicationMode.EXCEPTION
- lève une exception s'il y une ligne dans la base de données avec le même identifiant
ReplicationMode.LATEST_VERSION
- écrase la ligne si son numéro de version est plus petit que le numéro de version de l'objet, ou ignore l'objet sinon
Les cas d'utilisation de cette fonctionnalité incluent la réconciliation de données entrées dans différentes base de données, l'extension des informations de configuration du système durant une mise à jour du produit, retour en arrière sur les changements effectués durant des transactions non-ACID, et plus.