[Seasar-user:3598] Re: [S2DAO]Bean プロパティを使った SQL アノテーションで List 取得ができない

上原 慶三 [E-MAIL ADDRESS DELETED]
2006年 5月 11日 (木) 04:36:51 JST


 上原です。

h-hide21 wrote:
> 橋本と申します。既出なことであれば大変恐縮ですがその旨の
> 回答で結構ですのでご指示ください。
> また稚拙な問題で申し訳ありませんがよろしくお願いします。
> 
> S2Dao-1.0.31 + Oracle 9iR9.2 にて
> 
> 表hogeに対し、Daoに定義したあるメソッドに対しSQLアノテー
> ションを
> 使用し、そのSQL文中にはBeanによるプロパティ値を埋め込み
> ました。
> 
> --表hogeの作成
> create table hoge
> (
>   foo1     varchar2(10) not null,
>   foo2     varchar2(10) not null,
>   foo3     number,
>   date_foo date default
> to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') not
> null
> );
> --主キーの作成
> alter table hoge add constraint pk_hoge primary key (foo1,
> foo2, date_foo);
> 
> hogeDaoインターフェースを実装したクラスでメソッド
> getGroupList(Hoge hoge)を呼び出すと、
> 
> //hogeDaoインターフェース
> 
> List getGroupList(Hoge hoge);
> static final String getGroupList_SQL	= 
> "SELECT foo1, foo2, sum(foo3) AS foo3 "
> + "FROM HOGE "
> + "WHERE date_foo =
> TO_DATE(/*hoge.date_foo*/'2000-01-01','yyyy-mm-dd') "
> + "GROUP BY foo1, foo2";
> 
> DEBUG SELECT foo1, foo2, sum(foo3) AS foo3 FROM HOGE WHERE
> date_foo = TO_DATE('2006-05-10','yyyy-mm-dd') GROUP BY
> foo1, foo2
> DEBUG 論理的なコネクションを取得しました
> DEBUG 論理的なコネクションを閉じました
> DEBUG getGroupList Size :0
> 
> としてSQLが生成され、発行SQL文はOracle上(SQL*Plus)で
> 取得でき得るものと確認はできたのですが、このhogeDaoを
> 持つクラスでgetGroupList(Hoge hoge)を呼び出すと0件
> となり、例外もなく通過されます。
> 
> 結局、hogeDao#getHogeList(HogeDto dto)のSQLアノテーショ
> ンにおいて、
> Beanプロパティによる埋め込みコメントをやめ、引数も
> StringにしたことでListの件数が正しく取得することが
> できました。
> 
> List getGroupList2(String date_foo);
> static final String getGroupList2_ARGS	= "date_foo";
> static final String getGroupList2_SQL	= 
> "SELECT foo1, foo2, sum(foo3) AS foo3 "
> + "FROM HOGE "
> + "WHERE date_foo =
> TO_DATE(/*date_foo*/'2000-01-01','yyyy-mm-dd') "
> + "GROUP BY foo1, foo2";
> 
> DEBUG SELECT foo1, foo2, sum(foo3) AS foo3 FROM HOGE WHERE
> date_foo = TO_DATE('2006-05-10','yyyy-mm-dd') GROUP BY
> foo1, foo2
> DEBUG 論理的なコネクションを取得しました
> DEBUG 論理的なコネクションを閉じました
> DEBUG getGroupList2 Size :4
> 
> 本質的な使用方法の間違い、と言われるのかもしれませんが
> どこがイレギュラな利用であるのかをご教授いただけたら
> 幸いです。

ORACLEは詳しくないのでよくわからないのですが、
Hoge型のdate_fooプロパティの型は何でしょうか。
デバッグに出力されるSQLは見やすいようにプレースフォルダを実際の値から文
字列に変換したものが出力されますが、
実際にはデバッグに出力されるSQLが直接使用されるわけではありません。

例
デバッグで
SELECT * FROM HOGE WHERE date_foo = TO_DATE('2006-05-10','yyyy-mm-dd');
と表示されていても、
実際に実行されるSQLは
SELECT * FROM HOGE WHERE date_foo = TO_DATE(?,'yyyy-mm-dd');
で、Beanのプロパティの型によって、PreparedStatementのどのset...が
呼び出されるかが決まります。

でも、普通TO_DATEにDATE型渡したらエラーになるような。
#適当なこと言ってるのでぜんぜんはずしてたらごめんなさい
-- 
---
上原 慶三<[E-MAIL ADDRESS DELETED]>



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