[seasar-dotnet:1776] Re: [S2Dao.net] 検索処理の戻り値の型について

kubo [E-MAIL ADDRESS DELETED]
2010年 7月 10日 (土) 10:18:04 JST


久保(jflute)です。

李さん、こんにちは

> エラーメッセージやスタックトレースがわからないので
> ずれたことを言っているかもしれませんが、

まずは、小谷さんの言う通りなので、
エラーメッセージとスタックトレースを差し支えない
範囲で提示して頂けると助かります。

> S2DaoのJava版では、「検索処理の戻り値にBeanアノテーションに
> 指定したクラス以外のDTOやMapの利用が可能」の仕様はあります。
>  .Net版も同じ仕様(http://s2dao.net.seasar.org/ja/dao.html#Select の3行目)だ
> と思いますが、実際試したら、キャストエラーが発生しました。

状況を整理すると、Java版では

Beanアノテーション: DepartmentDto
Selectメソッド: List<DepartmentDto2> getAll();

で、Beanアノテーションとは違うDTOを戻り値(DepartmentDto2)
をGeneric型に指定して受け取る事ができると。
で、それがS2Dao.NETでもできるかどうか!?

Bean属性: DepartmentDto
Selectメソッド: IList<DepartmentDto2> GetAll();

で、実際に以下のことを試したらキャスト例外だったと。
(李さんの環境のVB.NETにおいて)

>  .Net版も同じ仕様(http://s2dao.net.seasar.org/ja/dao.html#Select の3行目)だ
> と思いますが、実際試したら、キャストエラーが発生しました。

こちらのドキュメントですが、
http://s2dao.net.seasar.org/ja/dao.html#Select
特に "Bean属性以外のDTO" という記述はなく、
3行目は、単にGeneric型を使った場合の戻ってくる
実体のクラスのことを書いているだけのように思えます。
(別件ですが、実体のクラスのnamespaceが間違ってる...)
なので、S2Dao.NETにおいて、"Bean属性以外のDTO" を
扱うことができるかどうかがそもそも不明な気がします。

そして、ぱっと見る限り、S2Dao.NETのテストでそういった
テストも見当たらず、ソースを見てもそれっぽいところが
見当たりません。どなたか、素のS2Dao.NETで、
"Bean属性以外のDTO" の戻り値を利用している人、
もしくは、利用できないことを知ってる人が
いらっしゃいましたら、フォロー頂けるとありがたいです。

ちなみに、DBFlute.NETと組み合わせたS2Dao.NETでは、
外だしSQLにおいて、この "Bean属性以外のDTO" の戻り値を
利用できます。(ただ、DBFlute.NETでは外だしSQLは別のI/Fが
あるので、そもそもそういった利用方法は今しませんが)
それは、DBFlute.NETで明示的にそのように拡張しているからです。
この拡張を実装した理由が、S2Dao.NETでそれができないから
拡張したのかどうか...
すいません、昔過ぎてちょっと忘れてしまいました。

2010/7/10 koyak <[E-MAIL ADDRESS DELETED]>:
> 李さん
>
> 小谷です。
>
> エラーメッセージやスタックトレースがわからないので
> ずれたことを言っているかもしれませんが、
> 「Function GetAll() As IList(Of DepartmentDto)」は
> 正常に動く、という前提でいくと
> IDepartmentDaoの方が怪しいように思えます。
>
> IDepartmentDaoのBean属性をご確認いただけないでしょうか。
> ここで指定している型がもし「DepartmentDto」のままでしたら
> 「DepartmentDto2」修正して実行してみて下さい。
>
> 2010年7月9日9:31 李い <[E-MAIL ADDRESS DELETED]>:
>> 李と申します。
>>
>> S2DaoのJava版では、「検索処理の戻り値にBeanアノテーションに
>> 指定したクラス以外のDTOやMapの利用が可能」の仕様はあります。
>> .Net版も同じ仕様(http://s2dao.net.seasar.org/ja/dao.html#Select の3行目)だ
>> と思いますが、実際試したら、キャストエラーが発生しました。
>>
>>
>> .Net版のサンプルを使って試しました。
>> 修正箇所: IDepartmentDao の
>> Function GetAll() As IList(Of DepartmentDto)
>>              ↓
>> Function GetAll() As IList(Of DepartmentDto2)
>>
>> 関連の箇所を省略します。
>>
>>
>> よろしくお願いします。
>>
>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内