この機能は、一般的に使用したいものではありません。以前に生成された識別子でオブジェクトを永続化したい場合は、 を使用できます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 が与えられていますがcourse1
、course1
なんらかのエラーのために永続化されていません。そのため、DB に一貫性がなくなります (student1
存在しないコースに登録されます)。不整合を修復するには、単純に と のデータを使用して新しいオブジェクトを作成し、をCourse
使用してそれを永続化します。id
course1
session.replicate()