【发布时间】:2012-12-30 04:46:43
【问题描述】:
在我看来,数据库更改的一个常见要求是添加一个不能为空的列。解决在某些情况下填充此列的问题的一种方法是在 DDL 中将其定义为“not null with default”。
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:没有方法签名:静态 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() 方法的签名相匹配。
问候,约翰
【问题讨论】:
-
没有看到您的代码,我们如何帮助解决缺少方法异常?
-
@James 我运行了 dbm-gorm-diff changelog-n.xml 命令。在 1.2.2 中工作,但在被 1.3.2 替换时给出了 MMException。我承认这是主要问题之外的一个问题,而不是追求这个的地方。我添加了它以防其他人看到这个。实际的 dbm-* 命令似乎无关紧要,因为所有/大多数命令似乎都使用 ScriptUtils.executeAndWrite()。约翰