[Seasar-user:13339] Re: 【DBFlute】ConditionBean による複数の親の親(おじいちゃん)の取得

森和紀 [E-MAIL ADDRESS DELETED]
2008年 3月 19日 (水) 14:10:59 JST


久保さん

お世話になっております。森です。

> 発生した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 メーリングリストの案内