[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 メーリングリストの案内