我有一个grails域,其中包含一个名为created
的字段,但现在我已将其更改为dateCreated
。但是,我的数据库表仍然有一个名为created
的列,所以每当我尝试保存记录时,就会抱怨Field 'created' doesn't have a default value
,即使我的域名中没有此字段。
如何解决这个问题?我是否必须打开我的数据库并删除此列?在rails中,这是通过迁移来处理的,grails中的等价物是什么?
答案 0 :(得分:4)
如果只重命名域字段,则可以在映射块中指定列名,而不是在重命名相关字段时更改它。因此,根本不需要更改数据库。
class MyDomain {
Date dateCreated
static mapping = {
dateCreated column: 'created'
}
}
答案 1 :(得分:1)
您必须在DataSource.groovy中指定dbCreate = "update"
。
如果您处于开发阶段,可以将其更改为dbCreate = "create"
以启用自动架构刷新。否则,在生产环境中,您必须保留该配置并手动更改表。
您可以参考Grails DataSource doc,它也提出了一些迁移工具:
您也可以完全删除dbCreate设置,即 建议一旦你的架构相对稳定,肯定是在什么时候 您的应用程序和数据库已部署在生产中。数据库 然后通过SQL进行适当的迁移来管理更改 脚本或迁移工具,如Liquibase(数据库迁移 插件使用Liquibase并与Grails和GORM紧密集成。