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

36

我的数据库背景来自于Django框架(Python)。在Django中,开始进行数据库迁移很容易:Django迁移。Django框架提供了基于模型创建迁移的工具,以及将迁移应用到数据库的工具。我认为这种做法在开发和生产中都很有效。你不必自己编写迁移,框架会为你创建。

现在我使用Spring Boot和Hibernate启动了一个项目。我配置我的应用程序使用JPA的Hibernate。在这些设置下,我现在需要知道我的框架如何处理数据库迁移?我的意思是,如果我更改一个列,无论是它的类型还是可能删除它,那么如何将数据库迁移到更改后的状态?我知道Spring Boot将在启动时自动检测列的更改,并基于模型(实体)创建不存在的列。我猜它与变量

spring.jpa.hibernate.ddl-auto

有关。但它如何处理现有的数据库对象?它也会将该列添加到它们中吗?值是多少?我设置的默认值?如果我更改了列类型怎么办?它能处理这个变化吗?这些设置和Spring Boot自动化的数据库管理可能不足以在长期内使用?

我想知道的是,如何处理Spring Boot和Hibernate组合的数据库迁移最佳实践是什么?我相信有一个标准,大多数使用这种组合的人都会处理迁移?我希望这与Django一样容易...我知道Flyway,但不确定我是否真正需要它,或者它是否在我的组合中经常使用(包括Spring Boot和Hibernate)。


7
是的,Flyway和Liquibase都是很好的数据库迁移工具。你使用Spring和Hibernate这一事实其实并不相关。如果你需要迁移数据库,它们都是不错的选择。ddl-auto并不是一个数据库迁移工具,它只是一个从头开始快速生成模式的方式,在我看来,并不适合在生产环境中使用。 - JB Nizet
嘿,如果我们可以使用Hibernate-JPA创建数据库和其他东西,那么迁移工具的需求是什么? - Ishan Garg
1个回答

21
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/提供了更多相关信息。

嘿,如果我们可以使用Hibernate-JPA创建数据库和其他东西,那么迁移工具的需求是什么? - Ishan Garg
你是否阅读了相关问题 https://dev59.com/fHVC5IYBdhLWcg3wpjB8,该问题应该能回答你的疑问。 - Darren Forsythe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接