Java 冬眠4深克隆

Java 冬眠4深克隆,java,hibernate,jpa,jpa-2.0,Java,Hibernate,Jpa,Jpa 2.0,我需要用一个对象和3个不同的孩子做一个深度克隆(一个对象) 我使用Hibernate中的“SerializationHelper.clone”执行此任务,但我只能复制父级和子级,使用此代码将子级更改的id复制到新的父级,这是不好的 错误在哪里,或者Hibernate4中此任务的最佳实践是什么 template = (Template) session.get(Template.class,Integer.valueOf(idTemplate)); template.setTextboxes(t

我需要用一个对象和3个不同的孩子做一个深度克隆(一个对象)

我使用Hibernate中的“SerializationHelper.clone”执行此任务,但我只能复制父级和子级,使用此代码将子级更改的id复制到新的父级,这是不好的

错误在哪里,或者Hibernate4中此任务的最佳实践是什么

template = (Template) session.get(Template.class,Integer.valueOf(idTemplate));

template.setTextboxes(template.getTextboxes());
template.setVariables(template.getVariables());

Template clone = (Template) SerializationHelper.clone(template);

session.save(clone);
编辑:对于孩子们,我有一个共同的单向关系:

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "template_id") 
private Set<Variable> variables = new LinkedHashSet<Variable>();

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "template_id")
private Set<TextBox> textboxes = new LinkedHashSet<TextBox>();
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name=“template\u id”)
私有集变量=新LinkedHashSet();
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name=“template\u id”)
private Set textboxs=new LinkedHashSet();

“但我只能复制父项和子项,使用此代码将子项的id更改为新的父项,这是不好的。”这不是矛盾吗?孩子们是否被复制?克隆后某些ID(FK?)发生更改?平均值,测试用例:ID 1-带2个文本框和1个变量的模板,副本应为带2个文本框和1个变量的ID 2模板,但不是:ID 1-带2个文本框和1个变量的模板和ID 2模板,在某个地方休眠更改文本框和变量的原始ID,这不是真的拷贝。不是,您看到的代码是我之前要保存的所有代码。
变量的
@Id
代码和
文本框的
是什么?这两个对象的代码是非常基本的,典型的Pojo。。只有像@Column这样的注释,我认为Hibernate 4本机不支持深度克隆。“但我只能复制父级和子级,用这段代码将子级更改的id复制到新的父级,这是不好的。”这不是矛盾吗?孩子们是否被复制?克隆后某些ID(FK?)发生更改?平均值,测试用例:ID 1-带2个文本框和1个变量的模板,副本应为带2个文本框和1个变量的ID 2模板,但不是:ID 1-带2个文本框和1个变量的模板和ID 2模板,在某个地方休眠更改文本框和变量的原始ID,这不是真的拷贝。不是,您看到的代码是我之前要保存的所有代码。
变量的
@Id
代码和
文本框的
是什么?这两个对象的代码是非常基本的,典型的Pojo。。只有像@Column这样的注释,我认为Hibernate4本机不支持深度克隆。