0

次のコード行には例外があります。

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

lookupPerson().children は、異なる ID を持つ 2 つの Child インスタンスのセットを提供します

完全な例外は次のとおりです。

  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 と新しいデータベースに新しいユーザーを追加しましたが、これには影響しません。

4

1 に答える 1

5

lookupPerson().childrenのコンストラクターに渡しています- これは でマップさPostOrderれたクラスのコレクションであると想定しています。したがって、Hibernate は何が起こっているかを伝えています。つまり、同じコレクションを 2 回使用しています。マップされたコレクションの所有者が 1 人だけであることは、私には理にかなっています。これらは通常の やではないことに注意してください。これらは Hibernateおよびであり、正しいインターフェースを実装していますが、Hibernate 固有です。Personstatic hasMany = [ ... ]ArrayListHashSetPersistentListPersistentSet

コレクション アイテムを new に渡したい場合は、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 }
于 2013-02-06T23:58:13.100 に答える