1概要

Spring Bootでは、データベースの変更を簡単に管理することが非常に簡単になります。デフォルト設定のままにすると、パッケージ内のエンティティが検索され、それぞれのテーブルが自動的に作成されます。

しかし、時にはデータベースの変更についてよりきめ細かい制御が必要になるでしょう。それが、Springで

data.sql

ファイルと

schema.sql

ファイルを使用できるようになったときです。


2

data.sql

ファイル

また、ここではJPAと連携していると仮定し、プロジェクト内に単純な

Country

エンティティを定義します。

@Entity
public class Country {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Integer id;

    @Column(nullable = false)
    private String name;

   //...
}

アプリケーションを実行すると、** Spring Bootは空のテーブルを作成してくれますが、それを追加することはできません。

これを行う簡単な方法は、__data.sqlという名前のファイルを作成することです。

INSERT INTO country (name) VALUES ('India');
INSERT INTO country (name) VALUES ('Brazil');
INSERT INTO country (name) VALUES ('USA');
INSERT INTO country (name) VALUES ('Italy');

このファイルをクラスパスで使用してプロジェクトを実行すると、Springはそれを選択してデータベースへのデータ投入に使用します。


3

schema.sql

ファイル

ときには、デフォルトのスキーマ作成メカニズムに頼りたくない場合もあります。そのような場合は、カスタムの

schema.sql

ファイルを作成できます。

CREATE TABLE country (
    id   INTEGER      NOT NULL AUTO__INCREMENT,
    name VARCHAR(128) NOT NULL,
    PRIMARY KEY (id)
);

Springはこのファイルを拾い上げ、それをスキーマの作成に使用します。

競合を避けるためにスキーマの自動作成を無効にすることを忘れないでください。

spring.jpa.hibernate.ddl-auto=none


4 Hibernate

を使用したデータベース作成の制御

Springは、HibernateがDDL生成に使用するJPA固有の

プロパティを提供します。



spring.jpa.hibernate.ddl-auto

.

標準のHibernateプロパティ値は以下のとおりです。


  • create

    – Hibernateは最初に既存のテーブルを削除してから新しいテーブルを作成します

テーブル
**

update

– マッピングに基づいて作成されたオブジェクトモデル(注釈)

またはXML)が既存のスキーマと比較され、その後Hibernateが更新されます。
diffに従ったスキーマ既存のテーブルは削除されません
アプリケーションで必要とされなくなった場合でも、列または列
**

create-drop



create

に似ていますが、それに加えて

すべての操作が完了すると、Hibernateはデータベースを削除します。

通常、単体テストに使用されます
**

validate

– Hibernateはテーブルとカラムかどうかを検証するだけです

存在しない場合は例外をスローします。
**

none

– この値はDDL生成を事実上無効にします

スキーママネージャが検出されなかった場合、Spring Bootは内部でこのパラメータ値を

create-drop

にデフォルト設定します。それ以外の場合は

none

になります。

データベースを初期化するには、値を慎重に設定するか、他のメカニズムのいずれかを使用する必要があります。


5結論

このクイック記事では、

schema.sql

ファイルと

data.sql

ファイルを使用して初期スキーマを設定し、それにデータを移入する方法を説明しました。

このアプローチは基本的で単純なシナリオにより適していることを覚えておいてください、どんな高度なデータベース処理も

Liquibase

または

Flyway

コードスニペットは、いつものようにhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-boot-persistence[over GitHub]にあります。