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 ...
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()
.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With