数据库的版本控制系统
Posted
技术标签:
【中文标题】数据库的版本控制系统【英文标题】:Versioning system for database 【发布时间】:2018-06-19 20:13:01 【问题描述】:我们有一个使用 spring boot 和 hibernate 的 java 应用程序。
实体和字段有很多变化。这就是为什么,我想遵循更改和回滚机制。所以,我需要一个数据库版本控制系统。我检查了flyway和liquibase,但我认为这些并不能解决我的问题。因为我的表创建和更新是由休眠处理的。
有什么方法可以查看 hibernate 执行了哪些查询来更改数据库以及自最近一次数据库更改(我的意思是新表、列创建或重构)以来发生了哪些更改?
【问题讨论】:
“因为我的表创建和更新是由休眠处理的。”那是你的错误。停止让 Hibernate 更改您的架构并开始通过 Flyway 或 Liquibase 手动管理它。 【参考方案1】:一种方法(我们如何做):
使用 2 个数据库。一个参考数据库和一个开发数据库。 在开发数据库上使用休眠让它创建结构。
开发周期完成后,您可以在参考数据库上运行 liquibase diffChangelog
。它将创建一个 changelog.xml,其中包含 hibernate 在开发数据库上所做的所有更改。手动更正它(名称等)。
当您对更改日志文件感到满意并且开发周期完成时,将更改日志应用到参考数据库中。
开始您的下一个开发周期并重复。
这样,您可以结合让 hibernate 生成架构的优势,并且仍然使用 liquibase 来拥有可重新创建的版本化 DB-Schema。
【讨论】:
我可以使用 diffChangeLog 通过 --diffTypes=data 参数获取表格行内容吗? @詹斯【参考方案2】:使用那些专门用于此目的的工具。就个人而言,我更喜欢 Liquibase,但这是您的选择。
不应在生产环境中使用 Hibernate 的模式创建机制,因为您对实体的 Java 描述会驱动表的创建,从而导致结构效率低下。 该功能仅用于测试目的。
【讨论】:
以上是关于数据库的版本控制系统的主要内容,如果未能解决你的问题,请参考以下文章