Extra DDL

src/main/resources/extra-ddl.xml を使用して、ビューやストアドプロシージャ、場合によってはインデックスなど、マッピングアノテーションから生成されていない DDL などの追加の DDL を提供します。

extra-ddl の DDL は通常のテストの一部として(dropCreate の後に実行)DB マイグレーションの一部として(繰り返し可能なマイグレーションとして)実行されます。

ベストプラクティス

extra-ddl.xml を使用する場合、従うと良いいくつかのプラクティスがあります。

  • スクリプト名に数字のプレフィックスを付ける(例: 1、2、3 ...)ことで、繰り返し可能なマイグレーション同士の実行を効果的に順序付けます。
  • DDL をすべて 1 つの大きな ddl-script エントリに配置しないでください。代わりに、一緒にドロップして再作成されるよう、ddl-script エントリに DDL をグループ化します。何かをそれ自体でドロップして再作成する場合、それ専用の ddl-script エントリに入れる必要があります。

ビュー

エンティティビーンで @View を介して使用できる DB ビューを定義するには、ddl-script 要素を extra-ddl.xml に追加してビューを作成する必要があります。各エントリでビューの再作成が可能になるように、通常は drop view if exitscreate view ステートメントが含まれます。

各エントリは「繰り返し可能な」マイグレーションになり、コンテンツのハッシュが変更されるたびに実行され、通常の「バージョン」マイグレーションのすべて実行後に実行されます。

ビューをそれ専用の ddl-script で作成するか、依存ビューをそれぞれの ddl-script(一緒に [ドロップして] 作成するビュー)に含めることがベストプラクティスであることに注意してください。

サンプル

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<extra-ddl xmlns="http://ebean-orm.github.io/xml/ns/extraddl">

  <ddl-script name="1 product view">
     drop view if exists product_vw cascade;

     create view product_vw as
      ...;
  </ddl-script>

  <ddl-script name="2 promotion views">
    -- 2 related/dependent views that drop and create together

    drop view if exists promotion_minprice_vw cascade;
    drop view if exists promotion_vw cascade;

    create view promotion_vw as
      ...;

    create view promotion_minprice_vw as
      ...;
  </ddl-script>

</extra-ddl>
  

ストアドプロシージャとトリガー

ストアドプロシージャとトリガーの場合は、関連オブジェクトの ddl-script を追加します。複数のデータベースをサポートするために、通常は platforms 属性を指定しています。

サンプル

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<extra-ddl xmlns="http://ebean-orm.github.io/xml/ns/extraddl">

  <ddl-script name="3 store price trigger" platforms="postgres">
    create or replace function trigger_store_price_log() returns trigger as $$
    begin
      ...;
    end;
    $$ LANGUAGE plpgsql;

    create trigger trg_store_price_log
      before update on store_price
      for each row execute procedure trigger_store_price_log();
  </ddl-script>

</extra-ddl>
  

任意の DDL

extra-ddl.xml に書き込める DDL には制限がないことに注意してください。アノテーションでモデル化および生成されていない DDL に Extra-DLL を使用しています。たとえば、一般的に CREATE TABLE ステートメントに extra-ddl は使用しないと考えられます。その DDL はマッピングアノテーション @Table などから生成されるからです。

プラットフォーム固有の DDL

複数のデータベースプラットフォームをサポートするには、DDL が適用されるデータベースプラットフォームを platforms 属性で指定します。

ビュー、ストアドプロシージャなどのデータベース固有の構文を処理するために、異なる platforms を持つ同じスクリプト name を使用できます。

サンプル

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<extra-ddl xmlns="http://ebean-orm.github.io/xml/ns/extraddl">

  <ddl-script name="5 order agg view" platforms="h2">
    -- h2 specific DDL
    drop view order_agg_vw;
    create view order_agg_vw as
    ...;
  </ddl-script>

  <ddl-script name="5 order agg view" platforms="postgres,mysql,db2">
    -- DLL for postgres, mysql and db2
    create or replace view order_agg_vw as
    ...
  </ddl-script>

</extra-ddl>