1

hibernate documentation:に従ってsession.replicate()、機能の使用方法とユースケースに関する小さな例があります:

セクション 11.9。2 つの異なるデータストア間でオブジェクトを複製しています:

この機能のユースケースには、異なるデータベース インスタンスに入力されたデータの調整、製品アップグレード中のシステム構成情報のアップグレード、非 ACID トランザクション中に行われた変更のロールバックなどがあります。

以下の場合にどのように役立つかを理解するのを手伝ってもらえますか:

  • 製品アップグレード時のシステム構成情報のアップグレード
  • 非 ACID トランザクション中に行われた変更のロールバックなど。
4

2 に答える 2

3

この機能は、一般的に使用したいものではありません。以前に生成された識別子でオブジェクトを永続化したい場合は、 を使用できますreplicate()

システムアップ時の使用例

システムをアップグレードして新しい機能を追加し、古い機能を削除する必要があるとします。ここで、既存のデータベースを新しいデータベースに移行して、新しい要件を促進したいと考えています。以下のsession.replicate()ように便利です。

 myNewObject.setId(myOldObject.getId());
 myNewObject.setExistingProperty(myOldObject.getExistingProperty());
 myNewObject.setNewProperty("my new property");
 session.replicate(myNewObject, ReplicationMode.EXCEPTION);

非 ACID トランザクションで行われた変更をロールバックするための使用例

非 ACID トランザクションの実行中にデータベースが不安定になったとします。たとえば、システムに と という名前の 2 つのクラスがあるとしCourseますStudent。非 ACID トランザクション中に、student1オブジェクトが で永続化されているとします。course1ここで、student1オブジェクトには既に の ID が与えられていますがcourse1course1なんらかのエラーのために永続化されていません。そのため、DB に一貫性がなくなります (student1存在しないコースに登録されます)。不整合を修復するには、単純に と のデータを使用して新しいオブジェクトを作成し、をCourse使用してそれを永続化します。idcourse1session.replicate()

于 2014-09-20T07:11:43.447 に答える