gpt4 book ai didi

grails - 在 grails 中找到对集合异常的共享引用

转载 作者:行者123 更新时间:2023-12-02 14:57:24 25 4
gpt4 key购买 nike

下面的代码行有一个异常(exception):

  def order = new PostOrder(pOrder: "post", posts: status, children: lookupPerson().children)

lookupPerson().children 给出了一组 2 个具有不同 id 的子实例

完整的异常(exception)是:
  org.hibernate.HibernateException: Found shared references to a collection: com.fyp.timeline.PostOrder.children
at com.fyp.timeline.ProfileController$$ENwi3LDE.updateStatus(ProfileController.groovy:134)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)

我真的坚持这一点。主要是因为它确实曾经工作并随机停止。我已经向 MySql 和一个新数据库添加了一个新用户,但这不应该影响这个。

最佳答案

你正在通过 lookupPerson().childrenPostOrder 的构造函数- 我假设这是 Person 中的一个集合用 static hasMany = [ ... ] 映射的类.所以 Hibernate 告诉你发生了什么——你使用了同一个集合两次。对我来说,映射集合应该只有一个所有者是有道理的。请记住,这些不是常规的 ArrayList s 或 HashSet s - 他们是休眠的 PersistentList s 和 PersistentSet s 实现了正确的接口(interface),但是是特定于 Hibernate 的。

如果要将收藏项传递给新的PostOrder ,您可以将它们复制到新集合中,例如

def order = new PostOrder(
pOrder: "post", posts: status,
children: [] + lookupPerson().children)

然而,由于这可能也是一个映射集合,您应该使用 addToChildren ,例如
def order = new PostOrder(pOrder: "post", posts: status)
lookupPerson().children.each { order.addToChildren it }

关于grails - 在 grails 中找到对集合异常的共享引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14740791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com