@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
我是否犯了错误或以任何其他方式从联系人中删除关联?
答案 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:)