У меня есть следующие классы:
abstract class Foo {
String x
...
static mapping = {
tablePerHierarchy false
}
}
class Bar extends Foo {
String y
...
}
И действие удаления в FooController выглядит следующим образом:
def delete() {
def f = Foo.get(params.id)
f.delete()
}
В моем конкретном сценарии Foo.get (params.id) возвращает объект типа Bar, поэтому, когда я вызываю f.delete () , Grails удаляет запись из таблицы Bar, но не из таблицы Foo.Это вызывает всевозможные проблемы, потому что Grails только наполовину удалил запись объекта.
Каков наилучший способ убедиться, что удаление каскадно поднимается по иерархии наследования, когда не используется tablePerHierarchy?
Существуют веские причины, по которым мы решили не использовать TablePerHierarchy, поэтому я не могу это изменить.
Кроме того, вызов следующего кода также приводит к удалению записи Bar, но не Foo:
Foo.executeUpdate("delete Foo f where f.id = :fid", [fid: Long.parseLong(params.id)])