GORM删除操作:找到同一集合的两个表示

时间:2011-05-18 07:16:46

标签: hibernate grails collections gorm

@Entity
public class Contact{
    List associations

    static hasMany[
    associations:Contact
    ]

    static mapping[
    associations cascade:"all-delete-orphan"
    ]
}

我可以删除Contact实体中的关联

Contact.withTransaction{status ->
        user.contacts.collect{Contact c->
            c.associations.collect{Contact association->
                c.associations.remove(association)
            }
        }
     }

尝试此操作时,我会org.hibernate.HibernateException:Found two representations of same collection: Contact.associations

我是否犯了错误或以任何其他方式从联系人中删除关联?

3 个答案:

答案 0 :(得分:1)

首先,在这种情况下你不应该使用collect。我认为适当的方法是各自的。此时您不需要使用withTransaction,期望您使用新的hibernate会话。试试这个:

def assocs = []
// store collection to avoid concurrent modification exception by during delection with in each   method
assocs += user.contacts.associations
assocs.each {
   // because of your cascase setting all orphans will be deleted automatically
   user.contacts.removeFromAssociations(it)
}

答案 1 :(得分:0)

我认为执行任务的方法较短:

def contact = Contact.get(...) // retrieve a contact
contact.associations.clear() // remove all associations of the contact

如果您不熟悉GORM,最好从this blog post开始。

答案 2 :(得分:0)

我解决了这个问题。问题是因为删除了数组中的关联。当我获得联系人列表时,它也给我关联,因为关联也是联系的实例。首先,我通过获取联系人然后删除了联系人的关联,通过sql查询获取联系人列表。非常感谢大家特别对HoàngLong:)