1

在用 orphan-removal="true" 和 Cascade.ALL 映射的父类中具有 @OneToMany 关系。

首先,我坚持父对象。

然后我在 ManagedBean 上克隆父级,如下所示:

Parent newParent = (Parent) org.apache.commons.lang.SerializationUtils.clone(this.object);

,因此用户可以进行一些更改并单击“保存”按钮。

此时我坚持 newParent 但收到以下错误:

##"Caused by: org.hibernate.HibernateException: Don't change the reference to a collection with cascade="all-delete-orphan":package.Parent.children"##

我真的不明白为什么我会收到这个错误,因为不需要这种关系。当我第一次坚持父母时,我没有为这种关系设置任何东西,它工作正常。

看起来问题是克隆后出现的,但我不知道为什么!

有人可以帮我解决这个问题吗?

谢谢。

4

1 回答 1

0

当您加载父项时,Hibernate 给了您一些引用,如果您没有显示 hibernate 给您的孤儿删除集合引用,您将无法再次保留父项,所以无论您打算如何处理数据,您唯一要做的就是可以对这些集合做的是添加或删除项目,但始终保留引用。

如果由于某些特殊原因丢失了任何引用,请再次加载父级并使用 hibernate 为您提供的新引用。

于 2013-06-14T15:35:07.073 回答