Postgres

@DbArray のプライマリターゲットデータベースは、単一ディメンションの配列としての Postgres です。時が経てば、これを Oracle ネストテーブルにもマッピングできるようになりますが、この段階では要求に応じて行われます (開発作業などを依頼して支援することができます)。

フォールバック

Postgres 以外のフォールバックは、データを JSON 形式で VARCHAR に格納することです (@DbJson を参照)。

例: uuid[]

@DbArray
List<UUID> uids = new ArrayList<UUID>();

上記は、uuid[] というデータベースの列型にマッピングされます。

例: integer[]

@DbArray
List<Long> someIds = new ArrayList<Long>();

上記は、integer[] というデータベースの列型にマッピングされます。

例: varchar[]

@DbArray
List<String> phoneNumbers = new ArrayList<String>();

上記は、varchar[] というデータベースの列型にマッピングされます。

フォールバックの varchar の長さ

length 属性は、Postgres 以外のデータベースで使用され、フォールバックの場合に使用される varchar 列のサイズを定義します。

// fallback to varchar(300) for non-Postgres databases
@DbArray(length = 300)
List<String> phNums = new ArrayList<String>();

Ebean の「クエリビーンズ」と ExpressionList に、実行したい一般的な ARRAY 式を処理するための 4 つの式が追加されました。

以下の例では、varchar の配列にマッピングされた phNums プロパティを使用しています。

contains()

List<Contact> contacts = Contact.find
    .where()
    .phNums.contains("2314")
    .findList();

contains() は @> contains 演算子を使用し、次の述語によって結果として表されます。

where t0.ph_nums @> array[?]; --bind(2314)

notContains()

List<Contact> contacts = Contact.find
    .where()
    .phNums.notContains("2314")
    .findList();

notContains() は @> contains 演算子を使用し、次の述語によって結果として表されます。

where not (t0.ph_nums @> array[?]); --bind(2314)

isEmpty()

List<Contact> contacts = Contact.find
    .where()
    .phNums.isEmpty()
    .findList();

isEmpty() は基数関数を使用し、次の述語によって結果として表されます。

where coalesce(cardinality(t0.ph_nums),0) = 0

isNotEmpty()

List<Contact> contacts = Contact.find
    .where()
    .phNums.isNotEmpty()
    .findList();

isNotEmpty() は基数関数を使用し、次の述語によって結果として表されます。

where coalesce(cardinality(t0.ph_nums),0) <> 0