如何使用 Hibernate 在 Spring Boot 中处理数据库迁移?
Posted
技术标签:
【中文标题】如何使用 Hibernate 在 Spring Boot 中处理数据库迁移?【英文标题】:How to handle database migrations in Spring Boot with Hibernate? 【发布时间】:2017-11-05 06:40:45 【问题描述】:我的数据库背景来自 Django 框架(python)。在 Django 中,开始进行数据库迁移很容易:Django migrations。 Django 框架提供了基于模型创建迁移的工具,以及在数据库上应用迁移的工具。我认为这种工作方式在开发和生产中都有效。您不必自己编写迁移,框架会为您创建它们。
现在我已经用 Spring Boot 和 Hibernate 启动了一个项目。我将我的应用程序配置为将休眠与 JPA 一起使用。有了这些设置,我现在需要知道我的框架如何处理数据库迁移?我的意思是如果我更改一列,无论是它的类型,甚至可能删除它,那么我如何将数据库迁移到更改中?我知道spring boot会在启动时自动检测列的变化,并根据模型(实体)创建不存在的列。我想这与变量有关
spring.jpa.hibernate.ddl-auto
但是它如何处理现有的数据库对象呢?它是否也将列添加到它们,并且具有什么价值?我设置的默认值?如果我更改列类型怎么办?那么它可以处理变化吗?这些设置和 spring-boot 自动化数据库管理从长远来看可能还不够?
我想知道的是,关于如何使用 Spring Boot 和 hibernate 组合处理数据库迁移的最佳实践是什么?我相信大多数人使用这种组合是有一个标准的处理迁移?我希望它和 Django 一样简单……我知道 flyway,但不知道我是否真的需要它,或者它是否与我的这种组合(包括 spring boot 和 hibernate)一起使用得很多。
【问题讨论】:
是的,Flyway 和 liquibase 都是很好的数据库迁移工具。您使用spring和hibernate的事实确实无关紧要。如果您需要迁移数据库,它们是不错的选择。 ddl-auto 不是数据库迁移工具。恕我直言,这只是一种快速入门并从头开始生成模式的方法。不是我在生产中使用过的东西。 嘿,如果我们可以使用 hibernate-jpa 创建数据库和东西,那么迁移工具需要什么 【参考方案1】: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 创建数据库和东西,那么迁移工具需要什么 您是否阅读过相关问题***.com/questions/221379/… 应该回答您的问题以上是关于如何使用 Hibernate 在 Spring Boot 中处理数据库迁移?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring 清除所有 Hibernate 缓存(ehcache)?
使用 spring 和 hibernate 时,如何处理会话/事务?
如何在 Spring 和 Hibernate 中使用两个数据库/数据源