[Seasar-user:8489] Re: [dbflute0.5.0] SQLの結果がEntityに格納されない

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 6月 20日 (水) 12:31:35 JST


丸岡です。

>1. S2DaoのVersionはいくつでしょうか?

WEB-INF/lib以下に
s2-dao-1.0.43.jar
s2-dao-tiger-1.0.43.jar
を配備しています。


>2. 自動生成された'dbflute.dicon'をそのまま利用されてますでしょうか?

resourcesフォルダ内には'dbflute.dicon'が配備されていましたが、
'app.dicon'にincludeしていませんでした。
そのため、DBFluteの機能が使用されていない状態になっていたようです。
include後は、久保さんのご指摘のとおりのログが出力されるようになりました。

ただし、DBFluteの機能を使用するようになったら、今度は別の問題が発生しました。
これまで(DBFluteの機能を使用する前)、メインクラス側から
 AbEntity ent = ADao.findXXX("hoge");
で呼出しをしたときのSQLログは
 ━━━━━━━━━━━━━━━━━━━━━━
 SELECT A.COL1, B.COL2 
  FROM A 
    INNER JOIN B ON
      A.COL1 = B.COL1
  WHERE
    A.COL4='hoge'
 ━━━━━━━━━━━━━━━━━━━━━━

だったのですが、DBFluteの機能を使用するようになったら
 ━━━━━━━━━━━━━━━━━━━━━━
 SELECT A.COL1, B.COL2 
  FROM A 
    INNER JOIN B ON
      A.COL1 = B.COL1
  WHERE
    A.COL4=null                 ←ここがnullになった
 ━━━━━━━━━━━━━━━━━━━━━━

というようにパラメタが引き渡されなくなってしまいました。
SQLファイル(a_getXXX.sql)は
 ━━━━━━━━━━━━━━━━━━━━━━
  SELECT A.COL1, B.COL2 
  FROM A 
    INNER JOIN B ON
      A.COL1 = B.COL1
  WHERE
    A.COL4=/*param1*/'1'
 --#AbEntity#
 ━━━━━━━━━━━━━━━━━━━━━━

と定義しており、exdao.ADaoには下記メソッドを定義しています。
 ━━━━━━━━━━━━━━━━━━━━━━
  @Arguments( { "param1"})
  public AbEntity findXXX(String param1);
 ━━━━━━━━━━━━━━━━━━━━━━

何かDBFluteでは他に設定する必要などがあるのでしょうか?



>久保です。
>
>
>> テーブルBのCOL2にも値が登録されているのにもかかわらず、
>> SQLの実行結果(ログの下から2行目)にはnullが返ってきています。
>> ログ出力されたSQLを実行すると、B.COL2は取得できています。
>> 
>> ADaoにメソッドを定義した場合、AEntity に設定されていないプロパティには
>> SQLの結果がセットされないような動きをしています。
>> この現象は仕様なのでしょうか?
>> SQL2Entityのドキュメント内に適切なDaoにメソッドを定義と書かれていたので、
>> 問題ないのかと思っていました。
>> 
>> また、複数のテーブルから値を取得する場合は、どのようにすればよろしいのでしょうか?
>
>やり方は合っています。
>ADaoに「AbEntityを戻り値にしたメソッド」を追加するやり方で問題ありません。
>どんなテーブルを結合してもSelect句の名前とEntityのプロパティ名を当てて
>マッピングするため、結合したどの列の値も取得可能です。
>
>
>
>ひとまず環境的なところを2点確認させてください。
>
>1. S2DaoのVersionはいくつでしょうか?
>
>  DBFlute-0.5.0のデフォルトはS2Dao-1.0.43(最新)なので恐らくそれだと
>  思われますが、念のため確認させて下さい。
>
>
>
>2. 自動生成された'dbflute.dicon'をそのまま利用されてますでしょうか?
>
>  提供頂きましたログの方ですが、ML投稿用に修正されたのかもしれませんが、
>  ちょっと見慣れないログの出方をしていたので念のため確認です。
>
>  通常、DBFluteのS2DaoInterceptorを使うと以下のようのログが出力されます。
>
>/================================================================
>                                              XxxDao.selectList()
>                                              ===================/
>SELECT A.COL1, B.COL2 
>  FROM A 
>    INNER JOIN B ON
>      A.COL1 = B.COL1
>  WHERE
>    A.COL4='hoge'
> --#AbEntity#
>===========/ [00m00s657ms - Selected count:...
>
>  このようなログが出力されていれば、DBFluteの機能を使っている証拠です。
>
>  もし、このログが出ていないようであれば、DBFluteのS2Dao拡張クラスが
>  設定されてない可能性があります。
>
>
>  具体的には、自動生成されたクラスのあるメソッド:
>  allcommon.s2dao.S2DaoMetaDataExtension#setupSelectMethodByManual()
>  をDaoメソッド実行時に必ず通過しなければなりません。
>  こちらのログのトレースを入れて必ずメソッドが呼び出されていることで
>  確認も可能です。
>
>
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED]
>https://ml.seasar.org/mailman/listinfo/seasar-user
>



Seasar-user メーリングリストの案内