如果在基类中,为什么不调用beforeValidate

时间:2014-05-27 13:47:58

标签: grails groovy

这只花了我差不多半天的时间(主要是因为Grails / Gorm对于发生的错误并不是非常直言不讳)

我必须使用其他人继承的域类

class Base {
    String a

    static constraints = {
        a blank: false, nullable: false, unique: true
    }
}

class Extended extends Base {
    String b

    static constraints = {
        b blank: false, nullable: false, unique: true
    }
}

现在我还有beforeValidate方法,该方法对a中定义的属性Base起作用。

def beforeValidate() {
    if (a == null) { a = "somevalue" }
}

如果我创建Extended的实例并保存

def instance = new Extended()
instance.save()

如果在beforeValidate中定义了class Extended,那么一切都会正常工作。

但是如果我将beforeValidate放入class Base,它将会失败(默默地)。

为什么?

PS:使用grails 2.4.0

1 个答案:

答案 0 :(得分:0)

如果基类不在grails-app/domain中,则不会调用事件处理程序。例如,如果项目的结构如下,则将忽略事件处理程序:

src
    groovy
        mypackage
            Base.groovy
grails-app
    domain
        mypackage
            Extended.groovy