我有 2 个具有多对多关系的域类。当我删除属于另一个的实体时,我必须先删除关系以避免外键错误。这些关系通过 MySQL 中的第三类第三表连接。
class City {
String nameCity
static hasMany = [visits:Visit]
/* FIRST VARIANT. REMOVES ONE VISIT ONLY */
def beforeDelete() {
Visit.withNewSession {
def visitList = Visit.findByCity(this)
visitList.each { it.delete(flush: true) }
}
}
}
//_____________________________________________
class Visit { // it is the relation class
City city
Person person
}
//_____________________________________________
class Person {
String namePerson
static hasMany = [visits:Visit]
}
所以当我删除两个类之间的关系时,它只删除一个关系。我的意思是,如果我们有 1 个城市和 1 个人,并尝试删除这个城市,应用程序功能正常。但是,如果您有多个 Person 附加到 City,我们将出现:“无法删除或更新父行:外键约束失败”。但是删除了一个关系。如果我再次尝试删除 City,第二个 Person 将被删除。我的应用程序的行为是这样的,直到最后一个 Person 被删除。因此, beforeDelete() 方法效果很好。我的问题是我不明白如何创建关系集合并在一个循环(循环)中将它们全部删除。如果我这样做:
class City {
String nameCity
static hasMany = [visits:Visit]
/* SECOND VARIANT. TYPE CAST EXCEPTION */
Collection<Visit> visitList() {
Visit.findByCity(this)
}
def beforeDelete() {
Visit.withNewSession {
visitList().each { it.delete(flush: true) }
}
}
}
我有 org.codehaus.groovy.runtime.typehandling.GroovyCastException 'Cannot cast object 'mypackage.Visit : 1' with class 'mypackage.Visit' to class 'java.util.Collection'。任何想法和帮助都非常感谢。