@OperatorHelper @Target(value=METHOD) @Retention(value=RUNTIME) @Documented public @interface MasterSelection
この演算子は、トランザクションデータに対応する複数のマスタデータを引き当てたのち、 実際に利用するマスタデータを選択する。 つまり、等価結合のみしか行えない環境において、重複するマスタデータから 複雑な条件でマスタデータを選択するために利用する。
この演算子は単独では利用できず、必ず他の演算子に組み込まれる形で利用する。 この演算子を組み込むことができる演算子は、下記のとおりである。
この演算子を参照する他の演算子は、かならず同じクラス内に宣言されていなければならない。 また、その演算子は同一種類のマスタおよびトランザクションデータを取り扱うものでなければならない。
このメソッドは、マスタデータを表すモデルオブジェクトを要素に取るリスト型
の引数と、
トランザクションデータを表すモデルオブジェクト型の引数を順に取る
(いずれも@
Key
注釈は不要である)。
メソッドの本体ではマスタデータを選択し、一つだけ選んで戻り値として返す。
各引数の内容を変更した際の動作は規定されない。
この注釈を付与するメソッドは、下記の要件を満たす必要がある。
abstract
例:
/**
* 有効なマスタを選択する。
* @param masters 選択対象のマスタデータ一覧
* @param tx トランザクションデータ
* @return 実際に利用するマスタデータ、利用可能なものがない場合は{@code null}
*/
@MasterSelection
public ItemMst selectItemMst(List<ItemMst> masters, HogeTrn tx) {
for (ItemMst mst : masters) {
if (mst.getStart() <= tx.getDate() &&
tx.getDate() <= mst.getEnd()) {
return mst;
}
}
return null;
}
/**
* マスタの価格をトランザクションデータに設定する。
* @param master マスタデータ
* @param tx 変更するトランザクションデータ
*/
@MasterJoinUpdate(selection = "selectItemMst")
public void updateWithMaster(
@Key(group = "id") ItemMst master,
@Key(group = "itemId") HogeTrn tx) {
tx.setPrice(master.getPrice());
}
MasterJoin
,
MasterBranch
,
MasterCheck
,
MasterJoinUpdate
Copyright © 2011–2019 Asakusa Framework Team. All rights reserved.