Каким образом класс домена может каскадировать «все-удалить-сироту» для дочернего элемента, на который он не имеет ссылки? - PullRequest
0 голосов
/ 07 мая 2011

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

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

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

class Mother{
}

class Father { 
}

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

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

Ответы [ 2 ]

2 голосов
/ 07 мая 2011

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

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

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

0 голосов
/ 07 мая 2011

У Питера Ледбрука есть хорошая статья, в которой рассказывалось об этом GORM Gotchas Part 2

Я не мог заставить работать часть, принадлежащую только мне, но это работает для меня:

class Father {
  static hasMany = [children: Child]
}

class Child {
  static belongsTo = [father: Father]
}

void testDeleteItg() {
    def father = new Father().save()
    def child = new Child()
    father.addToChildren child
    child.save()
    def childId = child.id

    father.delete(flush:true)
    assertNull(Child.get(childId))
}
...