web-dev-qa-db-ja.com

Hibernateを使用したSpring Bootでのデータベース移行の処理方法

私のデータベースの背景はDjangoフレームワーク(python)から来ています。 Djangoでは、データベースの移行を簡単に開始できました: Django migrations 。 Djangoフレームワークは、モデルに基づいて移行を作成するためのツールと、データベースに移行を適用するためのツールを提供しました。このやり方は、開発と生産の両方で機能したと思います。フレームワークがあなたのためにそれらを作成しました。

これで、Spring BootとHibernateを使用したプロジェクトを開始しました。 JPAでhibernateを使用するようにアプリケーションを構成します。これらの設定では、フレームワークがデータベースの移行をどのように処理するかを知る必要がありますか?列を変更した場合、列のタイプ、または削除する可能性がある場合、データベースを変更に移行するにはどうすればよいですか?スプリングブートは起動時に列の変更を自動的に検出し、モデル(エンティティ)に基づいて存在しない列を作成することを知っています。変数と関係があると思います

spring.jpa.hibernate.ddl-auto

しかし、既存のデータベースオブジェクトをどのように処理しますか?それらにも列を追加しますか?設定したデフォルト値は?列タイプを変更するとどうなりますか?その後、変更を処理できますか?これらの設定とスプリングブートの自動化されたデータベース管理は、おそらく長期的には十分ではないでしょうか?

私が知りたいのは、Spring BootとHibernateの組み合わせでデータベース移行を処理する方法のベストプラクティスは何ですか?標準があると信じていますこの組み合わせを持つほとんどの人がどのように移行を処理しますか? Djangoと同じくらい簡単であることを願っています...フライウェイについては知っていますが、本当に必要なのか、それとも私の組み合わせ(スプリングブートと休止状態を含む)で多く使用されるのかはわかりません。

14
Ville Miekk-oja

LiquibaseまたはFlywayは、データベース移行のバージョン管理/処理のための2つの主なオプションです。 ddl-autoは迅速で汚れていますが、処理する必要のあるすべてを考慮しません。また、競合状態の可能性もあります(2つのインスタンスが同時にDDLを更新しようとしています)。

この回答では、ddl-auto実稼働環境で、なぜそうすべきではないのか。

Hibernate:hbm2ddl.auto =本番環境で更新しますか?

https://www.credera.com/blog/technology-insights/Java/liquibase-fed-inconsistent-schemas/ には、why/conceptsに関する詳細情報があります。

10
Darren Forsythe