Groovy / Grails多对多删除关系

时间:2013-10-07 08:29:36

标签: grails groovy

我有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'。 任何想法和帮助高度赞赏。

1 个答案:

答案 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]
}

然后进行正常删除。这样,如果删除城市或人员,其所有相关访问都将被删除