使用Flyway和Hibernate的hbm2ddl在应用程序的生命周期中管理数据库模式

时间:2014-06-15 12:20:45

标签: java database hibernate flyway hbm2ddl

我正在开发一个Spring / Hibernate / MySql应用程序。该应用程序尚未投入生产,我目前使用Hibernate的 hbm2ddl 功能,这非常便于管理域上的更改。我还打算使用 Flyway 进行数据库迁移。

在未来的某个时刻,该应用程序将首次投入生产,这将导致我的第一组问题:

  • 用于架构创建的最佳实践是什么(第一次将应用程序发布到生产环境中)?具体来说,我应该让Hibernate的hbm2ddl在生产数据库上创建模式,还是让Flyway使用SQL脚本创建第一个模式?如果第二个选项(即Flyway)更可取,那么我应该从hbm2ddl创建的数据库中生成一个SQL脚本吗?

我们假设我的应用程序的第一个版本在生产中运行,我打算使用Hibernate的hbm2ddl在应用程序的第二个版本上恢复开发。

  • 我将如何管理对域的更改,尤其是计算数据库模式的第一版和第二版之间的差异,以便在发布到第二版的生产期间将数据库迁移?

1 个答案:

答案 0 :(得分:1)

最好的权衡是使用hbm2ddl进行集成测试,使用Flyway进行运行时,无论是QA测试还是生产环境。

您也可以使用hbmddl作为Flyway第一个脚本的基础,但是每次更改JPA模型时,您都需要手动创建一个新的更新脚本,这并不困难。这也可以使用DB特定功能。

由于集成测试和运行时使用不同的策略,因此必须编写一个系统集成测试,以比较hbmddl和Flyway创建的模式。同样这也不难,只需要确保你与实际的生产数据库进行比较(而不是内存中的集成测试)。

相关问题