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

2022-09-01 11:03:33

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

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

spring.jpa.hibernate.ddl-auto

但是它如何处理现有的数据库对象呢?它是否也向它们添加了列,以及具有什么值?我设置的默认值?如果我更改列类型,该怎么办?那么它能处理更改吗?从长远来看,这些设置和弹簧引导自动数据库管理可能还不够?

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


答案 1

Liquibase或Flyway是版本控制/处理数据库迁移的两个主要选项。 快速而肮脏,但它没有,也不能考虑需要处理的所有事情。这也是争用条件的机会(两个实例试图同时更新DDL)。ddl-auto

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

Hibernate: hbm2ddl.auto=update in production?

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


答案 2

推荐