我有一个使用Grails 1.3.7的应用程序,我刚刚将其迁移到Grails 2.0。应用程序使用自动dateCreated和lastUpdated字段来管理与对象的创建和修改相关联的时间戳。升级后,我得到以下错误:
| Running Grails application
| Error 2012-01-29 22:36:53,504 [Thread-8] ERROR util.JDBCExceptionReporter - ERROR: null value in column "date_created" violates not-null constraint
| Error 2012-01-29 22:36:53,510 [Thread-8] ERROR events.PatchedDefaultFlushEventListener - Could not synchronize database state with session在我的Domain类中注释掉上面提到的字段可以解决这个问题。
Grails2.0中是否已经弃用了dateCreated和lastUpdated字段?如果是这样,这是否意味着我必须手动编写代码来处理此功能,或者代码已被移动到某种插件中,如audit-trail插件?
发布于 2012-01-30 16:52:09
好的,通过在域类定义中将autoTimestamp变量手动设置为"true“来修复它:
static mapping = {
autoTimestamp true
}我猜这个属性是在将项目从Grails 1.3.7迁移到2.0.0之后没有设置的。
发布于 2012-01-30 01:08:24
Grails 2.0仍然支持自动时间戳。It's listed in the manual (scroll a bit from this link)。
但是,它特别提到:
如果您将
nullable: false约束放在dateCreated或lastUpdated上,您的域实例将无法通过验证-可能不是您想要的。除非您已禁用自动时间戳,否则请关闭这些属性的约束。
发布于 2012-05-05 03:08:56
Grails 2.0.3中有一个bug,在使用Postgres时可能会导致这个问题。参见http://jira.grails.org/browse/GRAILS-8988。该问题表示将在2.0.4发布时解决。
https://stackoverflow.com/questions/9052292
复制相似问题