java - Jhipster 实体子生成器:如何创建 liquibase DELTA 更改日志?
问题描述
jhipster --version
5.3.4
我正在评估 JHipster 并测试它如何处理数据库 DDL 修改。在我的测试中,我创建了一个 Jhipster 项目,然后运行jhipster import-jdl model.jh
. JHipster 生成了所有的集成测试,一切看起来都很好。所以我部署到生产环境。但后来我意识到我定义了一组实体之间的错误关系。当我打算声明关系时,原始model.jh
文件声明了关系。one-to-many
many-to-one
为了修复这种关系,我尝试了三种方法。首先,我尝试更正model.jh
文件中的关系并重新运行jhipster import-jdl
. 这做出了我需要的正确更改,只是它覆盖了 liquibase 更改日志文件,而不是创建一个仅包含增量的新更改日志条目。
所以我恢复了这个更改,并尝试使用实体子生成器。它也修改了原始变更日志文件,而不是创建增量变更日志文件。所以我恢复了这些更改以尝试另一种方法。
我手动对实体进行了更改,然后使用mvn liquibase:diff
. 这种方法最接近我的需要。它确实创建了一个新的变更日志,而不是更新原始文件。但是,新的变更日志试图改变的不仅仅是与关系关联的列。它试图更改表中几个不相关列的数据类型。它从现有列中删除了备注/评论。简而言之,它基本上是从头开始重新定义整个表格,所需要的改变比我试图做出的微小改变所必需的要多得多。我最终也恢复了这种方法。
所以,我的问题是,对于那些有经验的 JHipster 和 liquibase 用户,你如何在实体已经在生产中使用之后修改它们?您只是手动创建更改日志,还是有自动生成它们的好方法?
解决方案
- 在您的 JDL 中进行更改并导入它
- 恢复由实体生成器引起的对数据库更改日志文件的更改(包括
master.xml
) - 编译 Java(Liquibase 检查已编译代码)并运行命令以生成 Liquibase 更改日志
- 马文:
./mvnw compile liquibase:diff
- 摇篮:
./gradlew compileJava liquibaseDiffChangelog -PrunList=diffLog
- 马文:
- 将新的变更日志添加到
master.xml
- 启动您的应用程序,liquibase 将运行更改日志,您的数据库将是最新的
步骤 3-5 记录在 JHipster 的“使用数据库”文档中。请注意,这些步骤仅在您在 dev 中使用本地数据库时才有效,它目前不适用于 H2。
您可以在 Github 上的此分支中将这些步骤视为提交。
推荐阅读
- r - 按列名从矩阵中提取多列
- indentation - Nim - 必须丢弃 int 的函数类型
- php - JSON / JQuery - get_fields( ... ) 混淆
- java - 使用 Spring、Maven 和 Wildfly 加快开发/部署/运行周期
- javascript - 如何找到两个嵌套数组之间的差异并跟踪更新、删除或添加的内容
- python - LSTM 能否解决我目前遇到的特定问题
- scala - 需要基于Scala中的一列展平数据框
- javascript - Using Properties Store; adding to an array of info, retrieving info
- python - 如何在 tensorflow 中更新部分变量/占位符?
- flutter - 如何将 Flutter 中的一个小部件与另一个小部件叠加,不透明度设置为相乘?