我有2个具有多对多关系的域类。当我删除属于另一个的实体时,为了避免外键错误,我必须先删除关系。这些关系通过MySQL中的第三类,第三表连接起来。Groovy/Grails多对多删除关系
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连接到城市,我们将有: “无法删除或更新父行:外键约束失败”。但是一个关系被删除。 如果我再次尝试删除城市,第二个人将被删除。我的应用程序的行为,直到最后一个人被删除。所以,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“无法施展对象mypackage.Visit:“带班‘mypackage.Visit 1’上课”的java.util 。采集'。 任何想法和帮助高度赞赏。
现在它的功能完美无缺。问题的决定是如此短暂而美好。谢谢,艾伦! –