[Seasar-user:13345] Re: 【DBFlute】ConditionBean による複数の親の親(おじいちゃん)の取得
森和紀
[E-MAIL ADDRESS DELETED]
2008年 3月 19日 (水) 15:44:35 JST
久保さん
お世話になっております。森です。
> そもそも、例題のPurchaseのsetProduct(Product entity);
> が呼び出されたかどうか、というのもご確認頂けると
> 助かります。
先に、こちらを確認しました。
PurchaseのsetProduct(Product entity);は、呼び出されていませんでした。
※ setMember(Member entity);は呼び出されています。
お忙しいところ、お手数をおかけして申し訳ありません。
以上です。
08/03/19 に kubo<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 久保です。
>
> 森さん
>
> ご報告ありがとうございます。
> setupRelationAllValue()あたりもそうですが、
> そもそも、例題のPurchaseのsetProduct(Product entity);
> が呼び出されたかどうか、というのもご確認頂けると
> 助かります。Setterをオーバーライドして問答無用で
> 例外を発生させるようにすればすぐに検証可能です。
>
> 2008/3/19 森和紀 <[E-MAIL ADDRESS DELETED]>:
> > 久保さん
> >
> > お世話になっております。森です。
> >
> > > 発生したQUERYと別のQUERYでも発生するかどうか
> > > 確認して頂けますでしょうか?
> > selectEntity や selectPage などでも同様の現象が発生しています。
> > また、異なるテーブルで試しましたがやはり同じでした。
> >
> >
> > > 1. ログ上のSQL文のSelect句に取得できなかった
> > > テーブルのカラムが存在するかどうか?
> > 存在していました。
> > 出力された、SQLを下記に記載します。(一部編集しています。)
> >
> >
> > > 2. マッピング時の対象になっているかどうか?
> >
> > > 「リレーションNO(_0_2とか)」が出力されていること、
> > > そして、それが「true」であること。
> > 問題なさそうです。
> > 出力されたログを記載します。
> >
> > > setupRelationAllValue()あたりを探ることで状況がわかるかも
> > アドバイスありがとうございます。
> > これから調べてみます。
> >
> > そのほか、お気づきの点があればアドバイスお願いします。
> >
> >
> > <出力されたSQL>
> > select
> > dflocal.PURCHASE_DETAIL_ID as PURCHASE_DETAIL_ID,
> > dfrelation_1.PURCHASE_ID as PURCHASE_ID_1,
> > dfrelation_1_1.MEMBER_ID as MEMBER_ID_1_1,
> > dfrelation_1_0.PRODUCT_ID as PRODUCT_ID_1_0
> > from
> > TCLBOWNER.PURCHASE_DETAIL dflocal
> > left outer join
> > TCLBOWNER.PURCHASE dfrelation_1
> > on
> > dflocal.PURCHASE_ID = dfrelation_1.PURCHASE_ID
> > left outer join
> > TCLBOWNER.MEMBER dfrelation_1_1
> > on
> > dfrelation_1.MEMBER_ID = dfrelation_1_1.MEMBER_ID
> > left outer join
> > TCLBOWNER.PRODUCT dfrelation_1_0
> > on
> > dfrelation_1.PRODUCT_ID = dfrelation_1_0.PRODUCT_ID
> > where
> > dflocal.PURCHASE_DETAIL_ID = 1
> >
> > <埋め込んだログ>
> > ***: _0 = false
> > ***: _1 = true
> > ***: _1_0 = true
> > ***: _1_0_0 = false
> > ***: _1_1 = true
> > ***: _1_1_0 = false
> > ***: _1_1_1 = false
> > ***: _1_1_2 = false
> > ***: _1_1_3 = false
> > ***: _1_2 = false
> > ***: _1_3 = false
> > ***: _2 = false
> >
> > 以上、よろしくお願いします。
> >
> > 08/03/19 に kubo<[E-MAIL ADDRESS DELETED]> さんは書きました:
> >
> >
> > > 久保です。
> > >
> > > 森さん
> > >
> > > 了解です。よろしくお願いします。
> > >
> > > 確認ですが、以下のことを確認お願いします。
> > >
> > > 1. ログ上のSQL文のSelect句に取得できなかった
> > > テーブルのカラムが存在するかどうか?
> > > (なければ、SQL生成時点で既におかしな処理がありそうです)
> > >
> > >
> > > 2. マッピング時の対象になっているかどうか?
> > >
> > > allcommon.s2dao.S2DaoMetaDataExtension$RelationRowCreatorExtension
> > > のsetupPropertyCache()メソッド1185行目付近に、
> > > 以下のログを出力して下さい。
> > >
> > > // Do only selected foreign property for performance if condition-bean exists.
> > > if (hasConditionBean(res)) {
> > > final LdConditionBean cb =
> > > LdConditionBeanContext.getConditionBeanOnThread();
> > > // ここから
> > > boolean kokonoHantei =
> > > cb.getSqlClause().hasSelectedForeignInfo(res.getRelationNoSuffix());
> > > System.out.println("***: " + res.getRelationNoSuffix() + " = " +
> > > kokonoHantei);
> > > // ここまで
> > > if (!cb.getSqlClause().hasSelectedForeignInfo(res.getRelationNoSuffix())) {
> > > return;
> > > }
> > > }
> > >
> > > このログに、
> > > 「1」で確認した該当テーブルのAlias名のSuffixの
> > > 「リレーションNO(_0_2とか)」が出力されていること、
> > > そして、それが「true」であること。
> > > これをご確認ください。
> > >
> > > それでも不審点がなければ、そのすぐ上のメソッドで
> > > setupRelationAllValue()あたりを探ることで状況がわかるかも
> > > なのですが、ひとまず「1」と「2」を確認させて下さい。
> > >
> > > よろしくお願いします。
> > >
> > > 2008/3/18 森和紀 <[E-MAIL ADDRESS DELETED]>:
> > > > 久保さん
> > > >
> > > > お世話になっております。森です。
> > > >
> > > > > もしかしたら、さらに限定的な現象かもしれませんので、
> > > > > 発生したQUERYと別のQUERYでも発生するかどうか
> > > > > 確認して頂けますでしょうか?
> > > > 確認してみます。(明日になってしまうと思います。)
> > > >
> > > > 以上です。
> > > >
> > > > 08/03/18 に kubo<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > > >
> > > >
> > > > > 久保です。
> > > > >
> > > > > 森さん、こんにちは
> > > > >
> > > > > ご指摘頂いた現象ですが、こちらで再現がしません。
> > > > >
> > > > > DBFluteBasicExample等で、同様の検索をしてみましたが、
> > > > > 値が取得されます。(PurchaseCBTestにて実装しています)
> > > > > https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-basic-example
> > > > >
> > > > > もしかしたら、さらに限定的な現象かもしれませんので、
> > > > > 発生したQUERYと別のQUERYでも発生するかどうか
> > > > > 確認して頂けますでしょうか?
> > > > >
> > > > >
> > > > > 2008/3/18 森和紀 <[E-MAIL ADDRESS DELETED]>:
> > > > > > お世話になります、森と申します。
> > > > > >
> > > > > > ConditionBean による複数の親の親(おじいちゃん)の取得で確認したいことがあります。
> > > > > >
> > > > > > 親の親(おじいちゃん)の取得は「withXXX」メソッドを使用しているのですが、
> > > > > > 同じ親テーブルに対して複数の親の親(おじいちゃん)を取得することができません。
> > > > > > ※1つだけは取得できます。
> > > > > >
> > > > > > 以前使用していたバージョンでは取得できていたのですが、最新のバージョンで取得
> > > > > > することができません。
> > > > > > 何か変更があったのでしょうか?
> > > > > >
> > > > > > 現在のバージョン DBFlute 0.6.6
> > > > > > 以前のバージョン DBFlute 0.5.5
> > > > > >
> > > > > > <実装>
> > > > > > PurchaseDetailCB cb = new PurchaseDetailCB ();
> > > > > >
> > > > > > cb.setupSelect_Purchase().withMember();
> > > > > > cb.setupSelect_Purchase().withProduct();
> > > > > >
> > > > > > cb.query().setPurchaseDetailId_Equal(2002);
> > > > > >
> > > > > > PurchaseDetail result = purchaseDetailBhv.selectEntity(cb);
> > > > > >
> > > > > > result.getPurchase().getMember(); // こっちは取れる
> > > > > > result.getPurchase().getProduct(); // nullとなってしまう
> > > > > >
> > > > > > 以上、よろしくお願いします。
> > > > > > _______________________________________________
> > > > > > Seasar-user mailing list
> > > > > > [E-MAIL ADDRESS DELETED]
> > > > > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > > > > >
> > > > > _______________________________________________
> > > > > Seasar-user mailing list
> > > > > [E-MAIL ADDRESS DELETED]
> > > > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > > > >
> > > > _______________________________________________
> > > > Seasar-user mailing list
> > > > [E-MAIL ADDRESS DELETED]
> > > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > > >
> > > _______________________________________________
> > > Seasar-user mailing list
> > > [E-MAIL ADDRESS DELETED]
> > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > >
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内