[Seasar-user:9878] Re: [DBFlute]2個以上の引数をもつストアドプロシージャで引数がnullになる
kubo
[E-MAIL ADDRESS DELETED]
2007年 8月 13日 (月) 23:47:31 JST
久保です。
多加谷さん、こんばんわ
> dbflute-0.5.2
> s2dao-1.0.43
> SQL Server 2005
>
> で以下の現象が出ています。原因が分かりますでしょうか?
>
> [現象]
> SQL2Entityで生成したEntityを使い、Dao経由でストアドプロシージャを呼び出すと、引数が2個以上のときに引数が見つからずにすべてnullが渡されてしまう。
>
> --#UspGetFacilityList2Entity#--
> execute dbo.usp_get_facility_list2 /*currentDttm1*/'2007/08/01', /*currentDttm2*/'2007/08/01'
こちらですが、C#版S2Daoとは違い、2つ以上の引数の場合は、
ARGSアノテーションなるものを利用しなければなりません。
Javaでは、Methodの引数の名称がReflection経由で取得できないためです。
public static final uspGetFacilityList2_ARGS = "currentDttm1,currentDttm2";
http://s2dao.seasar.org/ja/s2dao.html#ArgsAnnotation
DBFluteでは引数が2つ以上のときに、
SqlParameterBeanなる引数DTOを利用するのが習慣です。
(ARGSアノテーションを利用しない)
http://dbflute.sandbox.seasar.org/ja/tips-sql2entity.html
【外だしSQL】
***************************************************************
--#UspGetFacilityList2Entity#--
--!CurrentDttmPmb!
--!!java.util.Date currentDttm1!!
--!!java.util.Date currentDttm2!!
execute dbo.usp_get_facility_list2 /*pmb.currentDttm1*/'2007/08/01', /*pmb.currentDttm2*/'2007/08/01'
***************************************************************
【Dao】
/*
* 全設備を取得する。
*/
List<RkUspGetFacilityList2Entity> uspGetFacilityList2(CurrentDttmPmb pmb);
【呼び出し側】
CurrentDttmPmb pmb = new CurrentDttmPmb();
pmb.setCurrentDttm1(date1);
pmb.setCurrentDttm2(date2);
List<RkUspGetFacilityList2Entity> ls = dao.uspGetFacilityList2(pmb);
どちらの方法を利用されても構いません。
Seasar-user メーリングリストの案内