Каким образом класс домена может каскадно "полностью удалить-сироту" для дочернего элемента, на который он не имеет ссылки?
В 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 ответа
Решение
Сделайте его двунаправленным, используя 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))
}