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 exits
と create 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>