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

时间:2018-10-25 21:44:11

标签: java jhipster liquibase jdl

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用户,您如何在已将其实体投入生产后对其进行修改?您是手动创建变更日志,还是有一种自动生成变更日志的好方法?

1 个答案:

答案 0 :(得分:2)

  1. 在您的JDL中进行更改并导入
  2. 将由实体生成器引起的更改恢复到数据库变更日志文件(包括master.xml)
  3. 运行./mvnw compile,这是生成变更日志之前所必需的,因为liquibase:diff会检查编译后的代码
  4. 运行./mvnw liquibase:diff生成变更日志
  5. 将新的更改日志添加到master.xml
  6. 启动您的应用,liquibase将运行变更日志,并且您的数据库将是最新的

第3步至第6步记录在JHipster的"Using a Database"文档中。请注意,仅当您在开发人员中使用本地数据库时,这些步骤才有效,而当前不适用于H2。

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