Setting default value for Date field in Grails Domain Class

笑着哭i 提交于 2019-12-06 02:54:18

问题


I'm trying to set a default value for a Date field in a Domain class.

I can use defaultValue in the mapping configuration but it doesn't work with Date fields (I've tried it on String and Integer and it works fine).

This is an example:

class Something {

    Date myField

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

}

This code fails because the CREATE statement that Hibernate generates is incorrect. It is something like:

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

回答1:


You can always initialize the field in the static initializer or set the value in the constructor:

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

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

This doesn't set a default value in the database schema, it merely sets the value of the field on creation of the instance. If you want the schema to have a default value, you can use the 'defaultValue' mapping entry like so:

class Something {
    Date myField

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

the value you set for the default value is dependent on your database vendor. (notice the use of sql now() method rather than Java/Groovy new Date().




回答2:


GORM readily caters for the most basic Date use cases; create and update.

Simply include keywords dateCreated and lastUpdated into the domain's properties for the default functionality to occur.

Warning: If their constraints are nullable: false this will cause a fail. Either remove those constraints or set autoTimestamp to false.

For example:

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

Read the more about groovy dates at this SO answer, the groovy date api, and GORM's date-event features here




回答3:


You can use this for default crated date auto get from system date

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


来源:https://stackoverflow.com/questions/20202702/setting-default-value-for-date-field-in-grails-domain-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!