我有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 。採集'。 任何想法和幫助高度讚賞。
現在它的功能完美無缺。問題的決定是如此短暫而美好。謝謝,艾倫! –