Каков наилучший способ добавить логику для удаления () в классе домена Grails? - PullRequest
3 голосов
/ 28 сентября 2011

Мне нужно внести изменения в другие классы домена при удалении экземпляра определенного класса домена.Каков наилучший способ сделать это?Я не хочу ждать фиксации или сброса, поэтому не думаю, что обратный вызов beforeDelete поможет.Я хотел бы "переопределить" удалить, сделать что-то и вызвать super.delete ():

class Foo {
    Bar bar
    void delete() {
        if (bar) bar.foo = null
        super.delete() -- this doesn't work
    }
}

В настоящее время я назвал "удалить" отмена, но хотел бы назвать это "удалить", но тогда я не могувызовите оригинал delete ().

Ответы [ 2 ]

5 голосов
/ 28 сентября 2011

Чтобы добавить к тому, что сказал @sbglasius, вот ссылка на документы по событиям GORM

Полный пример:

class Foo {
    Bar bar

    def beforeDelete() {
        if(bar) {
            bar.foo = null
        }
    }
}
1 голос
/ 30 сентября 2011

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

"Перегрузка" стандартными методами GORM CRUD

Я бы поместил логику «удаления» в сервис и назвал бы это вместо:

class FooService {

    def deleteInstance(foo) {
        if (foo?.bar) {
            foo.bar.foo = null
            // might have to call foo.bar.save() here
            // then foo.bar = null
        }
        foo.delete()
    }

}
...