SpecifiedDerivedOrderBy
概要
基本概念
子テーブルの導出カラムでソートします。
(Specify)DerivedReferrer と必ずセットで利用します。
会話上では、すぺしふぁいどでぃらいぶどおーだーばい と表現します。ややこしいので、DerivedReferrer の OrderBy と表現することもあります。
実装方法
実装の流れ
まずは、(Specify)DerivedReferrer を実装して、その後 query() に続いて addSpecifiedDerivedOrderBy_[Asc/Desc]() を呼び出して、DerivedReferrer で使った導出カラムのエリアス名を引数に指定します。
e.g. 子テーブルの導出カラムで並べる実装手順 (Eclipseでコード補完) {BIRTHDATE} @Java
MemberCB cb = new MemberCB();
cb.specify().derivedMemberLoginList().max(new SubQuery<MemberLoginCB>() {
public void query(MemberLoginCB subCB) {
subCB.specify().columnLoginDatetime(); // 導出カラムの指定
subCB.query().setMobileLoginFlg_Equal_False(); // 絞り込み条件
}
}, Member.ALIAS_latestLoginDatetime);
cb.query().addSD // .addSD まで打って Asc か Desc を選択
--
cb.query().addSpecifiedDerivedOrderBy_Desc(Member.ALIAS_latestLoginDatetime);
親テーブルの子テーブル
親テーブルの子テーブルの導出カラムも、最終的には基点テーブルのカラムと同レベルのカラムと扱われているため、特に変わらず基点テーブルの Query に対してソートを指定します。
e.g. 親テーブルの子テーブルの導出カラムで並べる実装手順 (Eclipseでコード補完) {BIRTHDATE} @Java
MemberCB cb = new MemberCB();
cb.specify().specifyMemberStatus().derivedMemberLoginList().max(new SubQuery<MemberLoginCB>() {
public void query(MemberLoginCB subCB) {
subCB.specify().columnLoginDatetime(); // 導出カラムの指定
subCB.query().setMobileLoginFlg_Equal_False(); // 絞り込み条件
}
}, Member.ALIAS_latestLoginDatetime);
cb.query().addSpecifiedDerivedOrderBy_Desc(Member.ALIAS_latestLoginDatetime);
Query(Relation) で親テーブルの Query にて指定しても動作します。特に違いはありません。
NullsFirst/Last の活用
導出カラムは関数の仕様として、データ存在しない場合に null になるケースが想定されますので、DerivedReferrerOption で coalesce を利用していない場合は、NullsFirst/Last が必要になる場面が多いと想定されます。
e.g. 最終ログイン日時の昇順で、ログインしたことない人を後に並べる @Java
...
cb.query().addSpecifiedDerivedOrderBy_Asc(Member.ALIAS_latest...).withNullsLast();
メソッド仕様
エリアス名は必須
エリアス名は必須です。
必ず DerivedReferrer の後に
(Specify)DerivedReferrer の処理の後で呼び出される必要があります。