Jhipster 实体子生成器:如何创建 liquibase DELTA 变更日志?

Jhipster entity sub generator: How to create liquibase DELTA changelogs?

jhipster --version

5.3.4

我正在评估 JHipster 并测试它如何处理数据库 DDL 修改。在我的测试中,我创建了一个 Jhipster 项目,然后 运行 jhipster import-jdl model.jh。 JHipster 生成了所有的集成测试,一切看起来都很好。所以我部署到生产环境。但后来我意识到我定义了一组实体之间的错误关系。当我打算声明 many-to-one 关系时,原始 model.jh 文件声明了 one-to-many 关系。

为了修复这种关系,我尝试了三种方法。首先,我尝试更正 model.jh 文件中的关系并重新运行 jhipster import-jdl。这进行了我需要的正确更改,只是它覆盖了 liquibase 更改日志文件,而不是创建仅包含增量的新更改日志条目。

所以我恢复了那个更改,并尝试使用实体子生成器。它也修改了原始的变更日志文件,而不是创建增量变更日志文件。所以我恢复了这些更改以尝试另一种方法。

我手动更改了实体,然后使用 mvn liquibase:diff。这种方法最接近我的需要。它确实创建了一个新的变更日志,而不是更新原始文件。但是,新的变更日志试图改变的不仅仅是与关系相关的列。它试图更改 table 中几个不相关列的数据类型。它从现有列中删除了 remarks/comments。简而言之,它基本上是从头开始重新定义整个 table,所进行的更改比我尝试进行的小更改所需的更改更多。我最终也恢复了这种方法。

所以,我的问题是,对于那些有经验的 JHipster 和 liquibase 用户,如何在生产中使用实体后对其进行修改?您是手动创建变更日志,还是有自动生成变更日志的好方法?

  1. 在您的 JDL 中进行更改并将其导入
  2. 还原由实体生成器(包括master.xml)引起的对数据库变更日志文件的更改
  3. 编译 Java(Liquibase 检查已编译代码)和 运行 命令以生成 Liquibase 变更日志
    • 行家:./mvnw compile liquibase:diff
    • Gradle: ./gradlew compileJava liquibaseDiffChangelog -PrunList=diffLog
  4. 将新的变更日志添加到 master.xml
  5. 启动您的应用程序,liquibase 将运行更新日志并且您的数据库将是最新的

步骤 3-5 记录在 JHipster 的 "Using a Database" 文档中。请注意,这些步骤仅在您在开发中使用本地数据库时才有效,它目前不适用于 H2。

您可以将这些步骤视为提交 in this branch on Github