У меня есть 2 класс домена со многими для многих отношений. Когда я удаляю объект, который принадлежит другому, я должен удалить отношение раньше, чтобы избежать ошибки внешнего ключа. Эти отношения связаны через третий класс, третью таблицу в MySQL.Groovy/Grails many-to-many delete relation
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: 1“с классом„mypackage.Visit“в классе» java.util .Коллекция'. Любые мысли и помощь высоко оценены.
Теперь он функционирует безупречно. И решение проблемы настолько короткое и приятное. Спасибо, Эйлен! –