1. ホーム
  2. スプリング

[解決済み] Spring.jpa.hibernate.ddl-autoプロパティは、Springで具体的にどのように動作しますか?

2022-04-07 04:27:34

質問

Spring bootアプリのプロジェクトで作業をしていて、時々、別のサーバー(SQL Server)にあるデータベースへの接続タイムアウトエラーが発生することに気づきました。 この現象は、次のようなスクリプトを実行したときに発生します。 FlyWay が、何度か試しているうちにうまくいくようになりました。

そこで気がついたのですが、私は spring.jpa.hibernate.ddl-auto をプロパティファイルに追加しました。調べてみたところ、このファイルに spring.jpa.hibernate.ddl-auto= create-drop を開発中です。 そして、それを変更する。 spring.jpa.hibernate.ddl-auto= none を実行します。

しかし、実際にどのように動作するのか、また、Hibernateがどのように create-drop または none の値を指定します。技術的にどのように動作するのか、また、開発および本番サーバーでこのプロパティを使用する際の推奨事項を説明してもらえますか? ありがとうございます。

どのように解決するのですか?

ちなみに spring.jpa.hibernate.ddl-auto プロパティはSpring Data JPA固有のもので、Hibernateが知っているプロパティの下に最終的に渡される値を指定する方法です。 hibernate.hbm2ddl.auto .

create , create-drop , validate および update 基本的に、スキーマツール管理は起動時にデータベーススキーマをどのように操作するかに影響します。

例えば update そして、Hibernate はアノテーションされたクラスや HBM XML マッピングを読み込んで作成したオブジェクトモデルを比較し、スキーマをオンザフライで調整しようとします。

update オペレーションは、新しい列や制約などを追加しようとしますが、以前は存在したかもしれないが、以前の実行からオブジェクトモデルの一部としてもはや存在しない列や制約を削除することは決してありません。

通常、テストケースのシナリオでは、多くの場合 create-drop スキーマを作成し、テストケースでモックデータを追加してテストを実行し、 テストケースのクリーンアップの際にスキーマオブジェクトを削除して空のデータベースを残すようにします。

開発では、しばしば、開発者が update を使えば、再起動時に自動的にスキーマを修正して、新しい追加項目を追加することができます。 しかし、これは以前の実行から存在する可能性のある、もはや必要のないカラムや制約を削除するものではないことを再度理解しておいてください。

実稼働環境では、しばしば none または単にこのプロパティを指定しない。 これは、特にデータベースが複数のサービスやアプリケーションで共有されている場合、DBAがデータベースの変更に関する移行スクリプトを確認することが一般的だからです。