2

我正在尝试使用 Monolith 和基于磁盘的 H2 数据库的 JHipster(版本 6.4.1)。我在 JDL 中创建了一些实体,并让基本的 CRUD 网页正常工作。现在我对这个过程感到满意,我想添加字段并重命名其他字段。我想我可以简单地更新 JDL,重新导入 JDL,启动应用程序,然后查看更改的结果。我看到的是ValidationFailedException来自 Liquibase 和由于数据库问题而引发 HTTP 500 错误的应用程序。

我已经到处寻找有关处理这种看似常见的开发场景的正确过程的指导。我寻找指导的大多数地方(例如https://www.jhipster.tech/creating-an-entity)都讨论将 JDL 导入为一次性操作,而不讨论如何增量更改和导入JDL。

我已经尝试了一些在 SO 上看到的建议,例如不覆盖更改日志、执行liquibase:diff. 并将其添加到master.xml. 这仍然导致ValidationFailedException. 在master.xml我看到评论<!-- jhipster-needle-liquibase-add-changelog - JHipster will add liquibase changelogs here -->让我相信 JHipster 应该做繁重的工作,但我只是错过了一步。

我绝不是 JHipster 也不是 Liquibase 专家,但我想学习。我如何能够轻松地执行简单的实体更新?

[更详细的更新]

重新导入更新的 JDL 后,我设法通过使用rm -rf target/h2db/db.

我对我的更改感到满意,并且觉得提交是有序的。我看到的是

  • master.xml不变
  • 第一次 JDL 导入的变更日志已修改为包含我所做的更新

如果我了解 liquibase 的工作原理,我会期待

  1. 不会触及任何现有的变更日志
  2. 将创建一个全新的更改日志文件,其中仅包含我在这一轮中所做的 JDL 更改
  3. master.xml只是因为它包含一个额外的更改日志条目而发生了变化,指向在第 2 项中创建的文件

我是否误解了 Liquibase 如何代表数据库模式的演变?

4

1 回答 1

0

您引用的页面似乎确实有一些更新实体的说明。在页面的下方,我看到了这个:

更新现有实体

实体配置保存在 .jhipster 目录中的特定 .json 文件中。因此,如果您再次运行子生成器,使用现有实体名称,您可以更新或重新生成实体。

当您为现有实体运行实体子生成器时,系统会询问您一个问题“您要更新实体吗?这将替换该实体的现有文件,您的所有自定义代码都将被以下选项覆盖:

  • 是的,重新生成实体 - 这只会重新生成您的实体。提示:这可以通过在运行子生成器时传递 --regenerate 标志来强制执行
  • 是的,添加更多字段和关系 - 这会给您添加更多字段和关系的问题
  • 是的,删除字段和关系 - 这将向您提出从实体中删除现有字段和关系的问题
  • 不,退出 - 这将退出子生成器而不更改任何内容

您可能出于以下原因想要更新您的实体:

  • 您想向现有实体添加/删除字段和关系
  • 您想将实体代码重置为其原始状态
  • 您已更新 JHipster,并希望使用新模板生成您的实体
  • 您已经修改了 .json 配置文件(格式与生成器提出的问题非常接近,因此不是很复杂),因此您可以拥有实体的新版本
  • 您已经复制/粘贴了 .json 文件,并且想要一个与复制的实体非常接近的新实体
于 2019-12-04T21:33:18.770 回答