我们有一个使用spring boot和hibernate的java应用程序。
实体和字段有很多变化。这就是为什么,我想遵循更改和回滚机制。所以,我需要一个基于数据库的版本控制系统。我检查了flyway和liquibase,但我认为那些并不能解决我的问题。因为我的表创建和更新是由hibernate处理的。
有没有办法查看hibernate执行哪些查询来更改数据库以及自最新数据库更改以来发生了哪些更改(我的意思是新表,列创建或重构)?
答案 0 :(得分:2)
一种方法(我们如何做):
使用2个数据库。参考数据库和开发数据库。 在开发数据库上使用hibernate让它创建结构。
完成开发周期后,您可以在参考数据库上运行liquibase diffChangelog
。它将创建一个changelog.xml,其中包含hibernate在开发db上完成的所有更改。手动更正它(名称等)。
当您对changelog文件和开发cylce完成满意时,将更改日志应用到参考数据库。
开始下一个开发周期并重复。
通过这种方式,您可以结合让hibernate生成模式的优点,并仍然使用liquibase来创建可重新创建的版本化DB-Schema。
答案 1 :(得分:0)
使用那些专用于此目的的工具。就个人而言,我更喜欢Liquibase,但这是你的选择。
Hibernate的模式创建机制不应该在生产中使用,因为实体的Java描述会驱动表的创建,从而导致结构效率低下。 该功能仅用于测试目的。