spring.jpa.hibernate.ddl-auto プロパティは Spring でどのように機能しますか? 質問する

spring.jpa.hibernate.ddl-auto プロパティは Spring でどのように機能しますか? 質問する

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-dropnoneまた開発および運用サーバーでこのプロパティを使用する際の推奨事項について説明していただけますか。ありがとうございます。

ベストアンサー1

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

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

たとえば、このupdate操作では、JDBC ドライバーの API を照会してデータベース メタデータを取得し、Hibernate は注釈付きクラスまたは HBM XML マッピングの読み取りに基づいて作成したオブジェクト モデルを比較し、その場でスキーマを調整しようとします。

たとえば、このupdate操作では新しい列や制約などを追加しようとしますが、以前に存在していたが、以前の実行からオブジェクト モデルの一部としては存在しなくなった列や制約は削除されません。

通常、テスト ケースのシナリオではcreate-drop、スキーマを作成し、テスト ケースで模擬データを追加し、テストを実行し、その後、テスト ケースのクリーンアップ中にスキーマ オブジェクトが削除され、空のデータベースが残るように を使用することになります。

開発では、開発者が再起動時に新しい追加を追加するためにスキーマを自動的に変更するために を使用するのがよく見られますupdate。ただし、これは以前の実行から存在する可能性のある、不要になった列や制約を削除するものではないことに注意してください。

運用環境では、noneこのプロパティを使用するか、または単に指定しないことを強くお勧めします。これは、特にデータベースが複数のサービスやアプリケーション間で共有されている場合、DBA がデータベースの変更について移行スクリプトを確認するのが一般的であるためです。

おすすめ記事