Question

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 ...
Was it helpful?

Solution

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

OTHER TIPS

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

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)
}
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top