此功能不是您想要普遍使用的。當您想用先前生成的標識符保留對象時,可以使用replicate()
。
實例應用對於系統向上漸變
假設您需要爲您的系統的一些新特性和刪除一些舊的升級。現在,您要將現有數據庫遷移到新數據庫,以促進您的新需求。該session.replicate()
可能是有用的象下面這樣:
myNewObject.setId(myOldObject.getId());
myNewObject.setExistingProperty(myOldObject.getExistingProperty());
myNewObject.setNewProperty("my new property");
session.replicate(myNewObject, ReplicationMode.EXCEPTION);
示例使用回滾所做的更改在非ACID事務
假設而做一些非ACID事務數據庫變得變化無常。比如說,你的系統中有兩個類名爲Course
和Student
。在非ACID事務期間,例如說student1
對象持續存在course1
,其中student1
對象已被標識爲course1
,但course1
由於某種錯誤而未被持久化。出於這個原因,你的數據庫變得不一致(student1
被註冊爲一個不存在的課程)。要修復不一致性,只需使用數據創建新的Course
對象,然後使用course1
創建id
,然後使用session.replicate()
將其保留。