找到对集合 org.hibernate.HibernateException 的共享引用

新手上路,请多包涵

我收到此错误消息:

错误:找到对集合的共享引用:Person.relatedPersons

当我试图执行 addToRelatedPersons(anotherPerson) 时:

 person.addToRelatedPersons(anotherPerson);
anotherPerson.addToRelatedPersons(person);

anotherPerson.save();
person.save();

我的域名:

 Person {

 static hasMany = [relatedPersons:Person];

}

知道为什么会这样吗?

原文由 nightingale2k1 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 498
2 个回答

当您尝试持久化共享 同一 集合引用的多个实体实例(即集合标识与集合相等性对比)时,Hibernate 会显示此错误。

请注意,它表示相同的 集合,而不是集合元素 - 换句话说 relatedPersons personanotherPerson 必须相同。也许您正在加载实体后重置该集合?或者您已经使用相同的集合实例初始化了两个引用?

原文由 ChssPly76 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有同样的问题。在我的例子中,问题是有人使用 BeanUtils 将一个实体的属性复制到另一个实体,所以我们最终有两个实体引用同一个集合。

鉴于我花了一些时间调查这个问题,我会推荐以下清单:

  • 寻找类似 entity1.setCollection(entity2.getCollection())getCollection 的场景返回对集合的内部引用(如果 getCollection() 返回集合的新实例,那么您不必担心)。

  • 查看 clone() 是否已正确实施。

  • 寻找 BeanUtils.copyProperties(entity1, entity2)

原文由 dgt 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题