根据 hibernate documentation: ,有一个关于如何使用 session.replicate()
和该功能用例的小示例:
第 11.9 节。在两个不同的数据存储之间复制对象:
Usecases for this feature include reconciling data entered into different database instances, upgrading system configuration information during product upgrades, rolling back changes made during non-ACID transactions and more.
有人可以帮助我了解它在以下情况下有何帮助:
- 在产品升级过程中升级系统配置信息
- 回滚在非 ACID 事务期间所做的更改等。
最佳答案
此功能不是您通常想要使用的东西。当你想用以前生成的标识符持久化你的对象时,你可以使用 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
对象已被赋予一个 ID course1
,但是course1
由于某些错误而未保留。因此,您的数据库变得不一致( student1
注册了一个不存在的类(class))。要修复您的不一致,您只需创建一个新的 Course
带有数据和 id
的对象的 course1
并使用 session.replicate()
坚持下去.
关于java - 何时使用 session.replicate() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25944516/