[Seasar-user:11341] Re: [DBFlute] 外部結合について
kubo
[E-MAIL ADDRESS DELETED]
2007年 10月 31日 (水) 12:39:16 JST
久保です。
米原さんへ
> >nの方に何か条件を固定で入れて、1:1で取得したいというわけでは>なく、
> >1:nの形でJava上に展開したいということでよろしいでしょうか?
>
>
> おそらくN側にwhere条件を追加して、結果的に1:1とすれば、
> 問題ないということですよね?
>
> それだったら良かったんですが、今回、1:nとしてJava上に展開したいです。
> その場合、ドキュメントで紹介しているDBFluteでのApproachによる
> 対応になりますよね?
はい、1:nとしてJava上に展開したい場合は、
http://dbflute.sandbox.seasar.org/ja/tips-behavior-one_to_many_loading.html
でお願いします。
ここでも書いておきます。
【例えば以下の前提】
会員(MEMBER)と購入(PURCHASE)というテーブルがあり、関連が{1:n}
会員(MEMBER):
MEMBER_ID (PK)
MEMBER_NAME
MEMBER_STATUS_CODE (区分:正式会員・仮会員・退会会員}
REGIETER_DATE
購入(PURCHASE)
PURCHASE_ID (PK)
MEMBER_ID (FK to MEMBER)
PURCHASE_COUNT
PURCHASE_DATE
【例えば以下のような検索】
正式会員(MEMBER)の一覧を登録日時の降順で検索して、
かつ、その会員に紐付く「購入数が2個以上の購入(PURCHASE)」を
購入日の降順で取得
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberCB cb = new MemberCB();
cb.query().setMemberStatusCode_Equal_Formalized();
cb.query().addOrderBy_RegisterDate_Desc();
List memberList = memberBhv.selectList(cb);
ConditionBeanSetupper<MemberCB> setupper = new ConditionBeanSetupper<MemberCB>() {
public void setup(MemberCB cb) {
cb.query().setPurchaseCount_GreaterEqual(2);
cb.query().addOrderBy_PurchaseDate_Desc();
}
};
memberBhv.loadPurchaseList(memberList, setupper);
for (Member member : memberList) {
List<Purchase> purchaseList = member.getPurchaseList();
// loadPurchaseList()を利用したことによって、
// 指定した条件に該当する購入(PURCHASE)の一覧が取得できる。
//
// (loadPurchaseList()しない場合は、このpurchaseListが空っぽ)
//
for (Purchase purchase : purchaseList) {
purchase.getPurchaseId();
...
}
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> おそらくN側にwhere条件を追加して、結果的に1:1とすれば、
> 問題ないということですよね?
こちらに関しては、実は自分「結果的に1:1」で
実際にあまり試したことはないです。
(Where句を設定しなかったときに誤動作するので)
もし、固定の条件を入れることで「結果的に1:1」であれば、
どちらかというと以下のやり方を推奨します。
http://d.hatena.ne.jp/jflute/20071022/1193032003
http://d.hatena.ne.jp/jflute/20071023/1193111262
Seasar-user メーリングリストの案内