在我看来,数据库更改的常见要求是增加了不能为null的列。解决某些情况下填充此列问题的一种方法是在DDL中将其定义为“默认不为null”。
Grails似乎没有在约束中直接支持'NNWD'。我测试了一个似乎可以等效的想法:
String name = default
...
name nullable:false
我想知道dbm-gorm-diff changleog-n.xml是否可以将其检测为默认值的null。但事实并非如此。那是1.2.2版本。我看到Liquibase通过其
<addNotNullConstraint
支持此功能。有计划引入这种支持吗?关于如何解决此问题的任何建议,可能是通过使用dbm脚本的用户编写脚本。
问题:
我尝试使用1.3.2,但是在运行脚本时遇到MissingMethodException。实际的错误行是:
groovy.lang.MissingMethodException:方法的无签名:static grails.plugin.databasemigration.ScriptUtils.executeAndWrite()适用于参数类型:(java.lang.String,java.lang.Boolean,DbmGormDiff $ _run_closure1_closure2)值:[changelog -with-data.xml,false,DbmGormDiff $ _run_closure1_closure2 @ 2f673724]
我不明白,因为args似乎与插件代码中的executeAndWrite()方法的签名匹配。
问候,约翰
最佳答案
我对此主题进行了调查,发现解决方案更加复杂,并且尝试通过使用“默认情况下不为空”添加列来解决问题。当我计划使用Liquibase和Ant在测试,uat和实时环境中更新数据库时,我指的是在下面使用xml文件。
如果表中没有任何数据,则可以添加“不为空”的列。在我看来,对于实时数据库而言,这是不太可能的情况。
当表包含数据时,必须将新列定义为null。有3个步骤,需要手动更新插件生成的xml文件:
我认为确实不需要该列的默认值,因为Grails会确保null不会从浏览器中获取。我说这是因为我还没有找到一种方法来更改添加的列的定义,因此它具有默认值。
约翰
关于grails - grails database-migration-它可以为 'not null with default'生成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14348705/