[Seasar-user:8506] Re: [dbflute0.5.0] SQLの結果がEntityに格納されない

kubo [E-MAIL ADDRESS DELETED]
2007年 6月 20日 (水) 18:25:25 JST


久保です。

> @Arguments( { "param1"}) を外して実行したところ、パラメタが引き渡されました。
> 
> ただ、メール中のSQLは編集したもので、実際のプロジェクトではパラメタが3つあるのです。
> ですので、@Arguments は必須となります。。
> 
> 他に怪しそうな個所はありますか?
> 例えば、パラメタは大文字のみ・小文字のみだとか。
> 
> app.diconには、現在以下のとおりに記述していますが、問題ないですか?
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
> 	"http://www.seasar.org/dtd/components24.dtd">
> <components>
> 	<include path="convention.dicon"/>
> 	<include path="aop.dicon"/>
> 	<include path="app_aop.dicon"/>
> 	<include path="teedaExtension.dicon"/>
> 	<include path="dao.dicon"/>
> 	<include path="dxo.dicon"/>
> 	<include path="dbflute.dicon"/>
> </components>

ご報告ありがとうございます。

この問題と直接関係あるかどうかは不明なのですが、
<include path="dbflute.dicon"/>を付けている場合、
大抵の場合、<include path="dao.dicon"/>は不要になります。
この"dao.dicon"はアプリケーションで独自に作成したdao.diconでしょうか?
それとも、S2DaoのJARの中に入っているdao.diconをincludeしているのでしょう
か?

もし後者の場合は、この<include path="dao.dicon"/>を削除して
今一度試していただけますでしょうか?



自分、TigerのARGSアノテーションを使ったことがないため、
もしかしたらDBFlute側にその辺の連携に不備があるのかもしれません。
(定数のARGSアノテーションでは実績があります)
引き続き調査いたします。



一つ別の角度からSql2Entity利用方法のアドバイスをさせて頂きます。

Sql2Entityには、戻り値のEntityを自動生成するだけでなく、
「引数DTO」(ParameterBean)を自動生成する機能があります。

    ex) LdBookDao.selectBookCollectionStatistic()の'.sql'
    /- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    --#BookCollectionStatistic#
    --*BOOK_ID*
    
    --!BookCollectionStatisticPmb!
    --!!java.math.BigDecimal bookId!!
    --!!String bookName!!
    
    select book.BOOK_ID
         , book.BOOK_NAME
         , (select count(*) from COLLECTION where BOOK_ID = book.BOOK_ID) as COLLECTION_COUNT
      from BOOK book
     /*BEGIN*/where
       /*IF pmb.bookId != null*/book.BOOK_ID = /*pmb.bookId*/1/*END*/
       /*IF pmb.bookName != null*/and book.BOOK_NAME like /*pmb.bookName*/'S2Dao' || '%'/*END*/
      /*END*/
     order by COLLECTION_COUNT desc
    ;
    - - - - - - - - - -/

上記のように、
--!xxx!で引数DTOのクラス名、
--!!type xxx!!でそのDTOのプロパティ名
を指定してSql2Entityを実行するとその引数DTOが自動生成されます。

そのクラスを使って引数とすると、必ず「引数が一つ」になるため、
ARGSアノテーションをつける必要がありません。
実業務での画面の検索条件などは10個以上に渡る事も多く、
単純に引数が多くなって見にくくなってしまうのと、
引数のARGSアノテーションをつけるのが面倒なため(設定ミスも発生する)、
このような機能を設けています。

DBFluteとしては、
引数が複数になる場合は引数DTO(ParameterBean)を利用して
ARGSアノテーションを使わないことを推奨としています。
(自分の周りのプロジェクトではシステム全体で
 一つもARGSアノテーションを 使ってなかったりします)


#
# 実は、C#版では上記の限りではないのですが、
# (Reflectionで変数名が取得できるためARGS属性は不要)
# 統一性を求めて、同様に引数DTO(ParameterBean)の利用を推奨しています。
#




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