Каким образом класс домена может каскадно "полностью удалить-сироту" для дочернего элемента, на который он не имеет ссылки?

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

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

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

class Mother{
}

class Father { 
}

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

Как мне каскад all-delete-orphanChildеслиFatherкласс не имеет прямой ссылки наChildучебный класс?

2 ответа

Решение

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

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

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

У Питера Ледбрука есть хорошая статья, в которой рассказывается о 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))
}
Другие вопросы по тегам