这个问题与Grails 2.1.1有关。我有一个域对象,其中包含在 Controller 中设置的3个日期字段。我有一个错误,其中忽略了 Controller 中设置的日期,并将替换为当前日期
奇怪的是,只有当我将域对象中的相应字段重命名为具有“date”后缀时,此行为才得以解决。
我想知道:
下面提供了分析和代码示例:
原始域对象和 Controller -在这种情况下,为“dateCreated”和“lastUpdated”设置的值将被系统日期忽略并覆盖。
class User {
String name
String title
String firstName
String lastName
Date companyCreationDate
Date dateCreated //works when renamed to createdDate (and controller updated accordingly)
Date lastUpdated //works when renamed to lastUpdatedDate (and controller updated accordingly)
static mapping = {
id column:'record_id'
}
static constraints = {
id()
title(blank: false, maxSize: 35)
firstName(blank: false, minSize: 1, maxSize: 35)
lastName(blank: false, minSize: 1, maxSize: 35)
}
}
类UserController {
static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
static df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)
def save() {
def user = new User()
user.name = params.name
user.companyCreationDate = df.parse("2006-09-07 13:26:15");
user.title = params._title
user.firstName = params._fname
user.lastName = params._lName
user.creationDate = df.parse("2006-09-07 00:00:00");
user.lastUpdatedDate = df.parse("2006-09-07 00:00:00");
if (user.validate()){
user.clearErrors();
if (user.save(flush: true)) {
flash.message = message(code: 'default.created.message', args: [message(code: 'registration.label', default: 'Registration'), user.id])
redirect(action: "show", id: user.id)
}
}
else
{
render(view: "create", model: [userInstance: user])
}
在Hibernate中设置跟踪选项后,我注意到在保存域对象(即调用“save(flush:true)”)与Hibernate执行持久性操作之间发生了这种转换。
最佳答案
您可以通过将autoTimestamp设置为false来禁用此功能:Grails Doc
关于hibernate - 日期字段的Grails GORM域对象命名约定和持久性后果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19244561/