java - 何时使用 session.replicate() 方法

标签 java hibernate hibernate-session

根据 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 事务时变得不稳定。比如说,你的系统中有两个类,CourseStudent .在非 ACID 事务期间,比如说 student1对象保留为 course1 , 其中student1对象已被赋予一个 ID course1 ,但是course1由于某些错误而未保留。因此,您的数据库变得不一致( student1 注册了一个不存在的类(class))。要修复您的不一致,您只需创建一个新的 Course带有数据和 id 的对象的 course1并使用 session.replicate() 坚持下去.

关于java - 何时使用 session.replicate() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25944516/

相关文章:

java - 从 map 中删除重复的结果(技术上不重复)

Java 记录 StackOverflow RuntimeException

java - 为什么在 JAVA 中按位 AND with byte 这样做?

hibernate - 检查域类的hasmany集合是否包含子集

java - hsqldb 中的 mysql 方言

java - Hibernate session.load 不填充对象的 arraylist 属性

java - 如何在 Activity 的 spring 事务中将数据刷新到数据库中?

java - 如何将 xml 属性值映射到属性文件中的键?

hibernate - 在 Grails/Hibernate 中,您可以将生成器设置为仅在未分配时递增吗?

java - 没有 Hibernate session 绑定(bind)到带有 generic-hibernate-dao 库的线程