我正在尝试开发一个访问由另一个系统管理和更新的模式的系统,因此数据库模式可能会独立于我的系统而更改。它不太可能是新表或删除列,更多是添加新列。
有没有办法在列添加到架构时自动更新我的域类,理想情况下通过调用Web服务然后此Web服务更新域类?即使它是一个CLI命令,它也不如必须进行手动代码更改。我知道你可以自动构建(构建视图和控制器),但是无论如何都要检查模式并查找新列然后将新属性添加到域类中?
我已经看了各种插件和页面,包括db-reverse-engineer(与2.4.3不兼容),database-migration(似乎更多的是在域类更改后更新数据库)和dynamic-domain-class(似乎创建了全新的域类,而不仅仅是更新属性)。
目前,我能想到这样做的唯一方法是运行一些自定义的sql来自己检查模式,拉回列名,类型和约束,然后使用dynamic-domain-class插件来创建自己的域类即时。但这看起来很混乱。
我基本上想知道域类名,但是有一个与域类属性无关的系统,这样我就可以在运行时根据域类(auto-scaffold)的属性动态构建一个gui。 / p>
提前感谢任何想法/提示。
答案 0 :(得分:0)
老兄,勉强想一想。放置一些可以监视远程端更改的代码,确保您已经存储了该记录,或者在某个稳定或某种时间发送给您的grails应用程序。您可以使用like来监视远程数据库并从远程生成更改日志的报告,然后可能尝试编写脚本
1.相应地更新您的域模型,例如,如果在Customers Table
上添加了lastname字段2.然后我可以给出的好建议是在使用某些排序脚本,数据库快照或某种同步对域进行更改后动态执行更改日志脚本,以便更好地使用AUTOSCAFFOLDING。
只是一个想法。 。 。
答案 1 :(得分:0)
关于逆向工程插件,您仍然可以使用grails 2.4.3运行它。问题是依赖于Hibernate 4,因为Hibernate API发生了变化。
如果您想继续使用此插件,可以通过评论以下行回到Hibernate 3:
runtime ":hibernate4:4.X.X.X"
并添加此代码:
runtime ":hibernate:3.6.10.17"
然后它将完美运行。我仍然计划升级这个非常有用的插件......但这需要一段时间:/