小编Ras*_*hen的帖子

在具有不同修订版本的休眠中克隆对象层次结构(包括一对一、一对多递归)

我的对象层次结构如下

对象 1 通过 OneToOne 映射到对象 2 对象 2 通过 OneToMany 映射到对象 3

因此,Obj1 将恰好有一个 Obj2,而 Obj2 将有许多 Obj3。

我的要求是克隆层次结构中的所有对象,并对特定变量(例如 String revision;)使用不同的值,比如说 revision 。简单来说,我应该有一个主修订版,另外还有针对三个组织的三个修订版。根据要求,每个组织都会有自己的副本,供其参考和更改。所以基本上我需要克隆对象层次结构,同时将修订版设置为“ORG1”、“ORG2”和“ORG3”。每个对象都会有一个 String 修订版;因此,当我克隆时,我应该能够设置修订版本,例如 obj1.setRevision("ORG1); //当我为组织设置克隆时1.

我使用了下面的机制

Object1 obj1ToBeClone  = Object1Service.findObject1ById(1l);
Object1 object1Cloned  =(Object1)SerializationHelper.clone(obj1ToBeClone);
object1Cloned.setId(null)
object1Service.saveObject1(object1Cloned);
Run Code Online (Sandbox Code Playgroud)

我使用了 spring 和 hibernate 来定义 dao 层。

然而,我注意到我仍然必须从 object1Cloned 获取 Object2 并将 id 设置为 null 并使用会话保存 obj2 才能克隆 obj2。代码如下

Object2 obj2 = object1Cloned.getObject2();
obj2.setId(null);
Run Code Online (Sandbox Code Playgroud)

这就是我在 Object1 中设置关系的方式。

@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name ="object2_id")
private Object2 object2;
Run Code Online (Sandbox Code Playgroud)

我的问题是,

  1. 我是否需要使用 setID(null) 获取对象层次结构中的所有对象并将 id 设置为 null,以便在数据库中生成新对象。 …

java spring hibernate clone

5
推荐指数
0
解决办法
521
查看次数

标签 统计

clone ×1

hibernate ×1

java ×1

spring ×1