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