如果我更改grails域中字段的名称会发生​​什么?

时间:2013-01-06 18:07:08

标签: java mysql grails gorm

我有一个grails域,其中包含一个名为created的字段,但现在我已将其更改为dateCreated。但是,我的数据库表仍然有一个名为created的列,所以每当我尝试保存记录时,就会抱怨Field 'created' doesn't have a default value,即使我的域名中没有此字段。

如何解决这个问题?我是否必须打开我的数据库并删除此列?在rails中,这是通过迁移来处理的,grails中的等价物是什么?

2 个答案:

答案 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紧密集成。