我有一个应用程序,每当该应用程序第一次在计算机上运行时,Hibernate都会创建我的所有表模式。这很好。
但是现在我想知道Hibernate是否具有某种机制来使数据库保持版本控制,即当我运行不同版本的应用程序时,Hibernate是否会知道如何将一个架构迁移到另一个架构,并且Hibernate找到与旧版本不同的数据库架构。版本存在吗?考虑到Hibernate可以读取现有的架构并将架构与映射描述进行比较,我以某种方式认为这应该可行。但是我不知道如何像使用Liquibase / Flyway创建更改脚本时那样告诉Hibernate迁移旧数据。
由于Hibernate和版本控制将向您展示很多有关审核和现场版本控制的信息,因此我可能没有在Google上搜索正确的内容,但是我在Liquibase / Flyway类型的版本管理方面考虑更多。我从未考虑过两者,但是由于Hibernate不会创建更新脚本而是直接操作数据库,因此我不知道如何使两者一起工作。
这是我第一次让Hibernate创建架构而不是编写自己的脚本。我这样做是为了利用Hibernate Envers使手动脚本创建变得更加乏味。也许我缺少明显的东西。感谢您对此事的任何投入!
更新:今天我必须与Flyway的开发人员交谈,他告诉我他不知道一个好的解决方案。也许什么都没有?
我们在Java / Hibernate项目中遇到了同样的问题,并且不需要任何代码复制工作。hibernate的“更新”功能根本不可靠,LiquidBase更好,但也不是100%可靠的。最后,我们开发了一个简单的脚本来管理以下过程:
我们脚本中的键盘命令如下所示:
${LIQB_COMMAND} ${PREV_DB_OPTIONS} --changeLogFile=${LIQB_CHGLOG_FILE_NEW} \ diffChangeLog \ --referenceUsername=${DEV_DB_USER} \ --referencePassword=${DEV_DB_PWD} \ --referenceDriver=com.mysql.jdbc.Driver \ --referenceUrl=${DEV_DB_URL}
这样,我们的迁移过程非常可靠,您无需编写模式代码两次。可以手动检查XML中生成的更改集,但是大多数时候都没有问题,而且与手动编写模式更改操作相比,它肯定容易得多。