我有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个人,并尝试删除这个城市,该应用程序功能正常。但是如果你有超过一个人加入纽约市,我们将: “无法删除或更新父行:外键约束失败”。但是删除了一个关系。 如果我再次尝试删除城市,则第二个人将被删除。我的应用程序表现得像那样,直到最后一个要删除的人。所以,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.Collection'。 任何想法和帮助高度赞赏。
答案 0 :(得分:0)
您是否尝试过以下操作?在理论上应该工作......
class City {
String nameCity
static hasMany = [visits:Visit]
class Visit { // it is the relation class
City city
Person person
static belongsTo = [city:City, person:Person]
}
class Person {
String namePerson
static hasMany = [visits:Visit]
}
然后进行正常删除。这样,如果删除城市或人员,其所有相关访问都将被删除