Как доменный класс может каскадировать «все удалить-сироту» дочернему элементу, на который он не ссылается?

В Grails у вас может быть дочерний класс:

class Child {
    Father father
    static belongsTo = [Father, Mother]
}

С двумя родительскими классами

class Mother{
}

class Father { 
}

Похоже, что если я father.delete(), то Grails выдает ошибку базы данных, сообщающую, что Father нельзя удалить, потому что child все еще существует.

Как каскадировать all-delete-orphan в Child, если класс Father не имеет прямой ссылки на класс Child?


person Mark Rogers    schedule 06.05.2011    source источник


Ответы (2)


Сделайте его двунаправленным, используя hasMany.

class Mother{
  static hasMany = Child
}
class Father{
  static hasMany = Child
}

Это должно заставить каскад работать так, что когда вы удаляете одного из родителей, дочерний элемент также будет удален.

person sul    schedule 06.05.2011
comment
Удалит ли это Father, если Child будет удалено, потому что я пытаюсь этого избежать? - person Mark Rogers; 07.05.2011
comment
нет, так как отец и ребенок - это отношения один ко многим, удаление ребенка не удалит отца. - person sul; 07.05.2011
comment
Спасибо за все, у меня возникли проблемы с тем, как это сделать с параметром карты hasMany. - person Mark Rogers; 07.05.2011
comment
Если ребенок принадлежит ОБА Отцу и Матери, и если Отец удален, есть ли способ предотвратить удаление ребенка? - person RRK; 03.05.2013