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

h-hide21 [E-MAIL ADDRESS DELETED]
2006年 5月 11日 (木) 09:46:57 JST


橋本です。
上原さん、早速のご返信に感謝致します。

> 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型渡したらエラーになるような。
> #適当なこと言ってるのでぜんぜんはずしてたらごめんなさい

ご指摘の date_foo は java.sql.Date型です。

>Beanのプロパティの型によって、PreparedStatementのどのset...
S2Daoのドキュメントであった
『バインド変数コメントの右側のリテラルに引数の値が自動的に置換され実行されます。 』
とあったので勘違いしておりました。

デバッグにて表現されるSQLの
SELECT * FROM HOGE WHERE date_foo = TO_DATE('2006-05-10','yyyy-mm-dd');

は、実際には
SELECT * FROM HOGE WHERE date_foo = TO_DATE(DATE '2006-05-10','yyyy-mm-dd');

として見られ、TO_DATE()されているようです。
どうもOracleのTO_DATE(char, fmt)の charにDATE値を与えると異なる西暦になるようです。
DB固有(Oracle)のことでお騒がせして申し訳ありませんでした。

以下はご参考までに。
SELECT TO_CHAR(TO_DATE(DATE '2006-05-10','yyyy-mm-dd'),'yyyy-mm-dd') AS RESULT FROM dual;

RESULT
----------
0006-05-10

*PostgresSQLでは問題ありませんでした。
SELECT TO_CHAR(TO_DATE(DATE '2006-05-10','yyyy-mm-dd'),'yyyy-mm-dd') AS RESULT;
   result
------------
 2006-05-10
(1 row)


--------------------------------------
Yahoo! JAPAN 10th Anniversary Special Feature
--- Enjoy Yahoo! Auction with Yahoo! Mail !! ---
http://pr.mail.yahoo.co.jp/auction/



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