1

我有 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'。任何想法和帮助都非常感谢。

4

1 回答 1

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

只需进行正常删除即可。这样,如果你删除了一个 City 或一个 Person,它的所有相关访问都会被删除

于 2013-10-07T09:16:43.803 回答