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

标签 java database hibernate flyway hbm2ddl

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

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

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

然后假设我的应用程序的第一个版本正在生产中运行,并且我打算使用 Hibernate 的 hbm2ddl 继续开发应用程序的第二个版本。

  • 我将如何管理对域的更改,特别是计算数据库架构的版本一和版本二之间的差异,以便在版本二发布到生产环境期间迁移数据库?

最佳答案

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

您也可以使用 hbmddl 作为 Flyway 第一个脚本的基础,但是每次更改 JPA 模型时,您都需要手动创建一个新的更新脚本,这无论如何也不那么困难。这也将允许使用数据库特定功能。

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

关于java - 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229529/

相关文章:

hibernate - 使用Hibernate 4生成SQL DB创建脚本

javax.persistence.PersistenceException : Unable to build EntityManagerFactory Tomcat 7 Spring Hibernate MS SQL

hibernate - 回滚是否终止 session ?

java - GWT 无法从 servlet 检索结果

Android SQLite 数据库 database/data/data/... (conn# 0) 已经关闭

MySQL:使用 IN 的嵌套 SQL

database - 如何将现有 TiKV 节点连接到 TiDB 中的新 PD 集群?

java - 在对话框中选择某个项目时启用按钮

java - 将复选框添加到 jTable 中?

java - 什么是NullPointerException,我该如何解决?