Database 如何在Grails中修改域类?

Database 如何在Grails中修改域类?,database,grails,Database,Grails,我无法理解在域类自动创建相应的数据库表之后修改它的“标准实践”是什么 Grails中没有“迁移”,我也无法告诉它输出它将生成的新SQL,以便您可以将其与以前的表定义进行比较,并手动发出您自己的ALTER table命令(我在django中就是这么做的) 我刚刚拿到了《Grails的权威指南》这本书,它没有提到这个问题,我在Grails网站上找不到任何东西。这是Grails的一个弱点,我不知道如何处理它。我要做的是创建修改后的域类的副本,然后将修改后的域类表的SQL模式与域类副本生成的SQL模式进

我无法理解在域类自动创建相应的数据库表之后修改它的“标准实践”是什么

Grails中没有“迁移”,我也无法告诉它输出它将生成的新SQL,以便您可以将其与以前的表定义进行比较,并手动发出您自己的ALTER table命令(我在django中就是这么做的)


我刚刚拿到了《Grails的权威指南》这本书,它没有提到这个问题,我在Grails网站上找不到任何东西。

这是Grails的一个弱点,我不知道如何处理它。我要做的是创建修改后的域类的副本,然后将修改后的域类表的SQL模式与域类副本生成的SQL模式进行比较。然后,您必须手动对原始表进行任何必要的更改。我发现,当域类发生变化时,关系之类的事情往往会发生变化,但是,添加约束以强制字段成为文本类型之类的事情并不总是会被更改……

如果您想要显式地管理Grails应用程序的数据库架构,我建议您查看或。

也许您应该考虑为应用程序创建一个独立于数据库(可以序列化为xml或json)-这样,当您更改db时,您还可以修改备份/恢复,以使旧域数据“升级”为ne域数据


我喜欢django如何自动完成这项工作,但django中有更多我不理解的魔力…

您也可以尝试使用“grails schema export”命令。。这将为您提供一个输出sql,其中包含用于表和约束的所有create命令

以此作为参考,您可以创建alter脚本。我想这是目前最好的


如果您找到了更好的方法,请务必告诉我们。

您应该尝试具有良好性能并得到积极维护的。

此外,删除属性不会删除Grails中的列。我相信这是为了安全,因为他们不想“弄清楚”是否可以删除参考栏。谢谢你的回答!那太糟糕了!至少它可以转储SQL以便您可以比较新旧。我发现,如果你只是添加一个字段,它“只是工作”。如果删除字段,它会将其保留在数据库中。(这没关系,你可以在确定不需要数据后删除它。)知道这些插件中哪一个更好吗?两个插件都使用Liquibase来管理数据库更改,所以可用的重构应该是相似的。但我不知道这两个插件的社区支持等。