首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用session.replicate()方法

何时使用session.replicate()方法
EN

Stack Overflow用户
提问于 2014-09-20 02:07:50
回答 2查看 2.6K关注 0票数 1

根据hibernate文档:,有一个关于如何为该特性使用session.replicate()和用例的小例子如下:

第11.9节。在两个不同的数据存储之间复制对象:

此功能的用途包括调节输入到不同数据库实例中的数据、在产品升级期间升级系统配置信息、回滚在非酸性事务处理期间所做的更改等。

有谁能帮我理解一下在以下情况下是如何帮助我的吗?

  • 在产品升级过程中升级系统配置信息
  • 回滚在非酸性事务处理期间所做的更改等。
EN

回答 2

Stack Overflow用户

发布于 2014-09-20 07:11:43

这个特性不是您想要一般使用的。当您想使用以前生成的标识符持久化对象时,可以使用replicate()

示例在系统升级中的应用

假设您需要用一些新的特性来升级您的系统,并删除一些旧的特性。现在,您希望将现有数据库迁移到新的数据库,以方便您的新需求。session.replicate()可以使用如下所示:

代码语言:javascript
复制
 myNewObject.setId(myOldObject.getId());
 myNewObject.setExistingProperty(myOldObject.getExistingProperty());
 myNewObject.setNewProperty("my new property");
 session.replicate(myNewObject, ReplicationMode.EXCEPTION);

示例用于回滚非酸性事务中所做的更改

假设您的数据库在执行一些非酸性事务时变得不稳定。比方说,您的系统中有两个类名为CourseStudent。在非ACID事务期间,假设student1对象与course1一起持久化,其中student1对象已经为course1提供了一个id,但是由于某些错误,course1没有被持久保存。由于这个原因,您的数据库变得不一致(student1注册参加一个不存在的课程)。要修复不一致性,只需使用数据和id of course1创建一个新的course1对象,并使用session.replicate()将其持久化。

票数 3
EN

Stack Overflow用户

发布于 2018-02-16 02:07:36

复制方法对我无效,因为在id上使用GeneratedValue (这是非常常见的)优先于您设置的id。这里有一个bug:https://hibernate.atlassian.net/browse/HHH-2716

解决方法是一个自定义生成器,而不是使用合并方法。https://stackoverflow.com/a/48819098/728602

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25944516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档