【问题标题】:Grails 2.4.3: Managing a changing schemaGrails 2.4.3:管理不断变化的模式
【发布时间】:2014-11-23 21:30:28
【问题描述】:

我正在尝试开发一个系统来访问由另一个系统管理和更新的架构,因此数据库架构可能会独立于我的系统而改变。不太可能是新表或删除列,更多的是添加新列。

有没有一种方法可以在将列添加到架构时自动更新我的域类,最好是通过调用 Web 服务,然后这个 Web 服务更新域类?即使它是一个 CLI 命令,也比手动更改代码要好。我知道您可以自动构建(构建视图和控制器),但无论如何都要检查架构并查找新列,然后将新属性添加到域类中?

我查看了各种插件和页面,包括db-reverse-engineer(与 2.4.3 不兼容)、database-migration(似乎更多用于在域类更改后更新数据库)和dynamic-domain-class(似乎创建了全新的域类,而不仅仅是更新属性)。

目前,我能想到的唯一方法是自己运行一些自定义 sql 来检查架构,拉回列名、类型和约束,然后使用动态域类插件制作我自己的动态领域类。但这似乎很混乱。

我想从本质上了解域类名称,但有一个与域类属性无关的系统,这样我就可以在运行时根据域类的属性(自动脚手架)动态构建一个 gui。

提前感谢您的任何想法/建议。

【问题讨论】:

    标签: database grails schema auto-generate


    【解决方案1】:

    关于逆向工程插件,您仍然可以使用 grails 2.4.3 运行它。问题在于对 Hibernate 4 的依赖,因为 Hibernate API 发生了变化。

    如果你想继续使用这个插件,你可以回到 Hibernate 3,通过注释以下行:

    runtime ":hibernate4:4.X.X.X"
    

    并通过添加这个来代替:

    runtime ":hibernate:3.6.10.17"
    

    然后它将完美运行。我仍在计划升级这个非常有用的插件......但这需要一段时间:/

    【讨论】:

    • 我试图这样做,但由于与其他插件的相互依赖关系(我认为主要是我的 Oracle SQL 数据源设置),我得到了一大堆错误。我可能会再试一次。
    • 这是一个奇怪的插件,因为它不像安全插件或资源等那样总是处于活动状态。通常你运行它几次就完成了。所以在那之后几乎没有理由继续安装。如果它在您使用的 Grails 版本中不起作用,请将其安装在可以运行的版本中,并使用该应用程序进行逆向工程工作。将生成的代码复制到您的真实应用中,然后尽情享受您的一天。
    • 我得到了那个用例。理想情况下,我希望能够在运行中以编程方式调用它,而不是每次架构发生细微变化时都必须依赖手动干预。
    【解决方案2】:

    伙计,只是想想而已。在远程放置一些可以监视您更改的代码,以确保您将该记录存储或在某个稳定的时间点或某种时间发送到您的 grails 应用程序。您可以使用 like 监控远程数据库并从远程生成更改日志报告,然后可以尝试编写脚本

    1. 相应地更新您的域模型,例如在客户表中添加姓氏字段

    2.那么我可以给出的好建议是在您使用某种脚本、数据库快照或某种同步对您的域进行更改后动态执行更改日志脚本,以更好地使用 AUTOSCAFFOLDING。

    只是一个想法。 . .

    【讨论】:

    • 这是另一种方法。我本身并不能真正访问远程端,只有数据库连接,但我可以编写一个自定义脚本,可以运行该脚本来生成更改日志,然后运行数据库迁移脚本。我只是希望有一种编程方式,而不是通过命令行。它的可测试性更强。而且我是个花花公子;)
    • 如果您避免使用诸如“勉强思考”之类的侮辱性短语,您会发现自己获得了更多的支持和接受的答案。同样,避免对所有大写的人大喊大叫。我没有问这个问题,但是当我看到“Dude”时,我立即认为这将是一个低质量的答案。少侮辱别人,他们会认真对待你。
    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2018-02-25
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多