在Grails Domain Class中设置Date字段的默认值

mat*_*eca 5 grails grails-domain-class

我正在尝试为DateDomain类中的字段设置默认值.

我可以使用defaultValue的mapping配置,但它不与工作Date领域(我就试了一下String,并Integer和正常工作).

这是一个例子:

class Something {

    Date myField

    static mapping = {
        myField defaultValue: new Date()
    }

}
Run Code Online (Sandbox Code Playgroud)

此代码失败,因为Hibernate生成的CREATE语句不正确.它是这样的:

... my_field datetime default Mon Nov 25 17:59:08 UYST 2013 not null ...
Run Code Online (Sandbox Code Playgroud)

cod*_*ark 12

您始终可以在静态初始化程序中初始化字段或在构造函数中设置值:

class Something {
    // initializer
    Date myField = new Date()

    // or in the ctor
    Something() {
        myField = new Date()
    }
}
Run Code Online (Sandbox Code Playgroud)

这不会在数据库模式中设置默认值,它只是在创建实例时设置字段的值.如果您希望架构具有默认值,则可以使用'defaultValue'映射条目,如下所示:

class Something {
    Date myField

    static mapping = {
        myField defaultValue: "now()"
    }
}
Run Code Online (Sandbox Code Playgroud)

您为默认值设置的值取决于您的数据库供应商.(注意使用sql now()方法而不是Java/Groovy new Date().