我无法弄清楚在自动创建相应数据库表后修改域类的“标准做法”是什么。
Grails中没有“迁移”,我无法告诉它输出它将生成的新SQL,因此您可以将其与之前的表定义进行比较并手动发出自己的ALTER TABLE命令(即我在django做的事情。)
我刚拿到了“Grails的权威指南”这本书,它对这个主题保持沉默,我在Grails网站上找不到任何内容。
答案 0 :(得分:10)
如果您想明确管理Grails应用程序的数据库架构,建议您查看Grails Liquibase plugin或Grails autobase plugin。
答案 1 :(得分:4)
这是grails的弱点,我不知道处理它的好方法。我所做的是创建修改的域类的副本,然后将修改的域类的表的SQL模式与域类的副本生成的模式进行比较。然后,您必须手动制作原始表所需的更改。我发现当域类这样的事情会发生变化时会发生变化,但是添加约束来强制字段成为文本类型之类的东西并不总是会被改变.......
答案 2 :(得分:0)
也许您应该考虑为您的应用程序创建一个独立于数据库的备份/恢复模块(可以序列化为xml或json) - 这样,当您更改数据库时,您还可以修改备份/恢复,这种方式使旧域数据“升级”为新域数据。
我喜欢django可以自动执行此操作,但是django中的魔法更多,我不明白......
答案 3 :(得分:0)
你也可以尝试'grails schema-export'命令..这会给你一个输出sql,它包含表和约束的所有create命令..
以此为参考,您可以创建更改脚本。这是目前我猜的最好的......
如果您找到更好的方法,请告诉我们。
答案 4 :(得分:0)
您应该尝试database-migration plugin documentation并且积极维护。