【问题标题】:Groovy/Grails many-to-many delete relationGroovy/Grails 多对多删除关系
【发布时间】:2013-10-07 08:29:36
【问题描述】:

我有 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 个人,并尝试删除这个城市,应用程序功能正常。但是,如果您有不止一个人附属于城市,我们将拥有: “无法删除或更新父行:外键约束失败”。但是删除了一个关系。 如果我再次尝试删除 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'。 任何想法和帮助都非常感谢。

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

    您是否尝试过以下方法?理论上应该可行...

    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,它的所有相关访问都会被删除

    【讨论】:

    • 现在可以完美运行了。问题决定是如此简短而美好。谢谢,艾伦!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多