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

时间:2017-06-04 10:01:04

标签: java spring hibernate jpa spring-boot

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

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

有关
  

spring.jpa.hibernate.ddl-自动

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

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

1 个答案:

答案 0 :(得分:10)

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/有更多关于原因/概念的信息。