我试图为Domain类中的Date
字段设置默认值。
我可以在defaultValue
配置中使用mapping
,但它不适用于Date
字段(我已经在String
和Integer
上进行了尝试{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 ...
答案 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
用例;创建和更新。
只需将关键字dateCreated
和lastUpdated
添加到域的属性中即可发生默认功能。
警告:如果他们的约束为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)
}
}