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

时间:2013-11-25 20:31:58

标签: grails grails-domain-class

我试图为Domain类中的Date字段设置默认值。

我可以在defaultValue配置中使用mapping,但它不适用于Date字段(我已经在StringInteger上进行了尝试{1}}它工作正常。)

这是一个例子:

class Something {

    Date myField

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

}

此代码失败,因为Hibernate生成的CREATE语句不正确。它类似于:

... my_field datetime default Mon Nov 25 17:59:08 UYST 2013 not null ...

3 个答案:

答案 0 :(得分:11)

您始终可以在静态初始值设定项中初始化字段,也可以在构造函数中设置值:

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

    // or in the ctor
    Something() {
        myField = new Date()
    }
}

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

class Something {
    Date myField

    static mapping = {
        myField defaultValue: "now()"
    }
}

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

答案 1 :(得分:0)

GORM很容易满足最基本的Date用例;创建和更新。

只需将关键字dateCreatedlastUpdated添加到域的属性中即可发生默认功能。

警告:如果他们的约束为nullable: false,则会导致失败。删除这些约束或将autoTimestamp设置为false。

例如:

class MyDomain {
   Date dateCreated
   Date lastUpdated
   Date yesterday = new Date().previous()
   Date weekAgo = new Date() - 7
   Date monthAgo = new Date() - 30
   Date usaIndepenceDay = new Date().copyWith(
         year: 1776, 
         month: Calendar.JULY, 
         dayOfMonth: 4, 
         hourOfDay: 0,
         minute: 0,
         second: 0)

   static mapping = {
     //autoTimestamp false
   }

   static constraints = {
     //dateCreated nullable: false
   }
}

this了解更多关于常规日期的回复,groovy date api和GORM的日期事件功能here

答案 2 :(得分:0)

您可以将此用于默认的装箱日期自动从系统日期获取

class User {
String userName
String firstName
String lastName
Date createdDate = new Date() // set system date


static mapping = {
    version false
    id generator: 'increment'
    cache true
}

static constraints = {
    userName(unique: true)
}
}