我对以下代码行有一个例外:
def order = new PostOrder(pOrder: "post", posts: status, children: lookupPerson().children)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
我真的很困惑.主要是因为它曾经常常工作并随机停止.我已经为MySql和一个新数据库添加了一个新用户,但这不应该影响这个.
你传递lookupPerson().children给的构造函数PostOrder- 我假设这是Person映射的类中的集合static hasMany = [ ... ].所以Hibernate告诉你发生了什么 - 你使用了两次相同的集合.我觉得应该只有一个映射集合的所有者.请记住,这些不是常规ArrayList的或HashSets - 它们是Hibernate PersistentList和PersistentSets,它们实现了正确的接口但是特定于Hibernate.
如果要将集合项目传递PostOrder给新集合,可以将它们复制到新集合中,例如
def order = new PostOrder(
pOrder: "post", posts: status,
children: [] + lookupPerson().children)
Run Code Online (Sandbox Code Playgroud)
但是,由于这可能也是一个映射集合,您应该使用addToChildren,例如
def order = new PostOrder(pOrder: "post", posts: status)
lookupPerson().children.each { order.addToChildren it }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1142 次 |
| 最近记录: |