3

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

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

4

2 回答 2

4

如果只是重命名域字段,可以在映射块中指定列名,重命名相关字段时不要更改。因此,根本不需要更改数据库。

class MyDomain {
    Date dateCreated
    static mapping = {
        dateCreated column: 'created'
    }
}
于 2013-01-06T19:05:02.130 回答
1

您必须dbCreate = "update"在 DataSource.groovy 中指定。

如果您处于开发阶段,您可以将其更改dbCreate = "create"为启用自动模式刷新。否则,在生产环境中,您必须保留该配置并手动更改表。

您可以参考Grails DataSource doc,其中也提出了一些迁移工具:

您也可以完全删除 dbCreate 设置,如果您的架构相对稳定,并且绝对是在您的应用程序和数据库部署在生产环境中时,建议您这样做。然后通过适当的迁移管理数据库更改,可以使用 SQL 脚本或像 Liquibase 这样的迁移工具(数据库迁移插件使用 Liquibase 并与 Grails 和 GORM 紧密集成)。

于 2013-01-06T18:37:53.557 回答