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