在Grails域类上为delete()添加逻辑的最佳方法是什么?

时间:2011-09-28 07:01:29

标签: grails gorm

当删除特定域类的实例时,我需要对其他域类进行更改。做这个的最好方式是什么?我不想等到提交或刷新,所以我不认为“beforeDelete”回调会有所帮助。我想“覆盖”删除,做一些事情并调用super.delete():

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

目前我已将“删除”命名为取消,但想将其称为“删除”,但之后我无法调用原始的删除()。

2 个答案:

答案 0 :(得分:5)

要添加@sbglasius所说的内容,这里是link to the docs on GORM events

完整示例:

class Foo {
    Bar bar

    def beforeDelete() {
        if(bar) {
            bar.foo = null
        }
    }
}

答案 1 :(得分:1)

我自己没有试过重写GORM方法,但这可能会对所涉及的内容有所了解:

"Overloading" standard GORM CRUD methods

我会将“删除”逻辑放在服务中并调用它:

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()
    }

}