grails是否具有自动约束更新。如果我们通过添加约束将域类中的字段更改为可为空,则在没有模式导出的情况下,它不会反映在数据库中。是否有可能让grails自动执行此更新。
答案 0 :(得分:2)
不,Grails / Hibernate不会自动更新您的数据库架构(除了添加新属性之类的简单情况),因为这不是可以可靠地自动化的任务(特别是对于更改的数据类型或约束)。如果将属性的数据类型从String更改为int,Hibernate应该对现有数据做什么?
所以,这些东西必须手动完成。但是,有一个工具支持,即Autobase plugin,它基于liquibase。如果您曾使用RoR开发过,那么您可能熟悉迁移 - 这实际上是autobase提供的内容。我绝对可以推荐autobase / liquibase,我们在所有的生产项目中都使用它。
答案 1 :(得分:0)
你能做的最基本的事情就是这个。
您应该维护应用程序的更改日志,这些数据库架构更改应该在您创建时记录在此日志(只是文本文件)中。然后,您制作的每个版本都应该有一个关联的SQL脚本(如果有DB更改),此脚本应该处理这些约束更改(以及其他内容......)。
在生产之前,必须首先针对暂存环境测试此SQL脚本。
此外,您可能需要等待在数据库中维护数据库架构版本(在元类表中),Rails迁移会执行此操作。
上述内容并非详尽无遗,只是一般指导方针