在Parent类中使用孤儿移除="true"和Cascade.ALL映射一个@OneToMany关系。
首先,我持久化父对象。
然后在ManagedBean上克隆父节点,如下所示:
Parent newParent = (Parent) org.apache.commons.lang.SerializationUtils.clone(this.object);
,这样用户可以做一些更改,并单击保存按钮。
在这个时候,我坚持newParent,但得到以下错误:
##"由:org.hibernate.HibernateException引起:不要更改对集合的引用级联= " all-delete-orphan ": package.Parent.children"# #
我真的不明白为什么我得到这个错误,因为关系不是必需的。当我第一次持久化父节点时,我没有为这个关系设置任何东西,它工作得很好。
看起来问题发生在克隆之后,但是我不知道为什么!
有人能帮我解决这个问题吗?谢谢。
当你加载父类时,Hibernate给了你一些引用,如果你没有显示Hibernate给你的孤儿删除集合引用,你就不能再次持久化父类,所以无论你计划对数据做什么,你对这些集合唯一能做的就是添加或删除项,但总是保持引用。
如果由于某些特殊原因丢失了任何引用,请重新加载父类并使用hibernate提供的新引用。