2014-09-20 40 views
1

作爲每hibernate documentation:,有關於如何使用session.replicate()和usecases該特徵作爲一個小例子:何時使用session.replicate()方法

11.9節。複製對象的兩個不同數據庫之間:

Usecases此功能包括:進入 不同數據庫中核對數據,產品升級時升級系統配置 信息,回滾期間 非ACID事務中所做的更改。產品升級時

  • 回滾non-ACID事務中所做的更改

    • 升級系統配置信息:

  • 是否有人可以幫助我理解它是如何在以下情況下有用。

    回答

    1

    此功能不是您想要普遍使用的。當您想用先前生成的標識符保留對象時,可以使用replicate()

    實例應用對於系統向上漸變

    假設您需要爲您的系統的一些新特性和刪除一些舊的升級。現在,您要將現有數據庫遷移到新數據庫,以促進您的新需求。該session.replicate()可能是有用的象下面這樣:

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

    示例使用回滾所做的更改在非ACID事務

    假設而做一些非ACID事務數據庫變得變化無常。比如說,你的系統中有兩個類名爲CourseStudent。在非ACID事務期間,例如說student1對象持續存在course1,其中student1對象已被標識爲course1,但course1由於某種錯誤而未被持久化。出於這個原因,你的數據庫變得不一致(student1被註冊爲一個不存在的課程)。要修復不一致性,只需使用數據創建新的Course對象,然後使用course1創建id,然後使用session.replicate()將其保留。

    相關問題