我正在尝试使用 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 的工作原理,我会期待
- 不会触及任何现有的变更日志
- 将创建一个全新的更改日志文件,其中仅包含我在这一轮中所做的 JDL 更改
master.xml
只是因为它包含一个额外的更改日志条目而发生了变化,指向在第 2 项中创建的文件
我是否误解了 Liquibase 如何代表数据库模式的演变?