java - 如何使用 Hibernate 在 Spring Boot 中处理数据库迁移?

标签 java spring hibernate jpa spring-boot

我的数据库背景来自 Django 框架(python)。在 Django 中,开始进行数据库迁移很容易:Django migrations . Django 框架提供了基于模型创建迁移的工具,以及在数据库上应用迁移的工具。我认为这种工作方式在开发和生产中都有效。您不必自己编写迁移,框架会为您创建它们。

现在我已经用 Spring Boot 和 Hibernate 启动了一个项目。我将我的应用程序配置为将 hibernate 与 JPA 一起使用。有了这些设置,我现在需要知道我的框架如何处理数据库迁移?我的意思是如果我更改一列,无论是它的类型,甚至可能删除它,那么我如何将数据库迁移到更改?我知道spring boot会在启动时自动检测列的变化,并根据模型(实体)创建不存在的列。我想这与变量有关

spring.jpa.hibernate.ddl-auto

但是它如何处理现有的数据库对象呢?它是否也将列添加到它们,并且具有什么值(value)?我设置的默认值?如果我更改列类型怎么办?那么它可以处理变化吗?这些设置和 spring-boot 自动化数据库管理从长远来看可能还不够?

我想知道的是,关于如何使用 Spring Boot 和 hibernate 组合处理数据库迁移的最佳实践是什么?我相信大多数人使用这种组合是有一个标准的处理迁移?我希望它和 Django 一样简单……我知道 flyway,但不知道我是否真的需要它,或者它是否与我的这种组合(包括 spring boot 和 hibernate)一起使用得很多。

最佳答案

Liquibase 或 Flyway 是版本控制/处理数据库迁移的两个主要选项。 ddl-auto 又快又脏,但它没有,也不能,考虑到所有需要处理的事情。还有可能出现竞争条件(两个实例同时尝试更新 DDL)。

这个答案更详细地介绍了生产环境中的 ddl-auto 以及为什么不应该这样做。

Hibernate: hbm2ddl.auto=update in production?

https://www.credera.com/blog/technology-insights/java/liquibase-fed-inconsistent-schemas/有更多关于原因/概念的信息。

关于java - 如何使用 Hibernate 在 Spring Boot 中处理数据库迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44352870/

相关文章:

javascript - 开发工具中的ajax状态是200,但是为什么会出错呢?

java - 如何查询postgres数据库以获取特定坐标10公里半径内的所有点

java - 我如何访问java中if语句之外的变量

java - 注释顺序在 SB 应用程序中是否重要?

java - 无法使用 HttpClient 读取浏览器 cookie

java - Hibernate SQLite SQLITE_BUSY

java - Spring MVC 文件上传 - 客户端发送的请求在语法上不正确

java - 当它可能为空时如何从 Hibernate 返回一个唯一的结果?

java - 将内存从 JVM 返回给操作系统

java - 隐藏 <s :param> from the url