数据库版本控制系统

Versioning system for database

我们有一个 java 应用程序,它使用 spring 引导和休眠。

实体和字段有很多变化。这就是为什么,我想遵循更改和回滚机制。因此,我需要一个基于数据库的版本控制系统。我检查了 flyway 和 liquibase,但我认为这些不能解决我的问题。因为我的 table 创建和更新是由休眠处理的。

有什么方法可以查看 hibernate 执行了哪些查询来更改数据库,以及自最近一次数据库更改(我的意思是新 table、列创建或重构)以来发生了哪些更改?

使用那些专用于此目的的工具。就个人而言,我更喜欢 Liquibase,但这是您的选择。

Hibernate 的模式创建机制不应在生产中使用,因为您对实体的 Java 描述会驱动表的创建,从而导致结构效率低下。 该功能仅用于测试目的。

一种方法(我们是怎么做的):

使用 2 个数据库。参考数据库和开发数据库。 在开发数据库上使用 hibernate 让它创建结构。

开发周期完成后,您可以在参考数据库上 运行 liquibase diffChangelog。它将创建一个 changelog.xml,其中包含 hibernate 在开发数据库上所做的所有更改。手动更正它(名称等)。 当您对变更日志文件感到满意并且开发周期完成后,将变更日志应用到参考数据库中。

开始你的下一个开发周期并重复。

这样您就可以结合让 hibernate 生成模式的优点,并且仍然使用 liquibase 来获得可重新创建的版本化 DB-Schema。