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