【问题标题】:How do you modify a Domain Class in Grails?如何在 Grails 中修改域类?
【发布时间】:2009-08-03 02:50:43
【问题描述】:

我不知道在自动创建相应的数据库表之后修改域类的“标准做法”是什么。

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

我刚拿到《The Definitive Guide to Grails》这本书,它没有提及这个主题,我在 Grails 网站上找不到任何东西。

【问题讨论】:

    标签: database grails


    【解决方案1】:

    如果您想显式管理 Grails 应用程序的数据库架构,我建议您查看 Grails Liquibase pluginGrails autobase plugin

    【讨论】:

    • 知道这些插件哪个更好吗?
    • 两个插件都使用 Liquibase 来管理数据库更改,因此可用的重构应该是相似的。但我不知道这两个插件的社区支持等。
    【解决方案2】:

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

    【讨论】:

    • 此外,删除属性永远不会删除 Grails 中的列。我确信这是出于安全考虑,因为他们不想“弄清楚”是否可以删除参考列。
    • 感谢您的回答!这很糟糕!至少它可以转储 SQL,以便您可以比较新旧。我发现如果你只添加一个字段,它“就可以工作”。如果您删除一个字段,它将保留在数据库中。 (没关系,您可以在确定不需要数据后将其删除。)
    【解决方案3】:

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

    我喜欢 django 如何自动执行此操作,但 django 中还有更多我不明白的魔力...

    【讨论】:

      【解决方案4】:

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

      以此为参考,您可以创建您的变更脚本。我猜这是目前最好的..

      如果您找到更好的方法,请告诉我们..

      【讨论】:

        【解决方案5】:

        您应该尝试database-migration plugin,它具有良好的documentation 并得到积极维护。

        【讨论】:

          猜你喜欢
          • 2013-01-27
          • 2011-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多