[Seasar-user:10987] Re: [Teeda] 1.0.12-EA1-SNAPSHOT
kubo
[E-MAIL ADDRESS DELETED]
2007年 10月 13日 (土) 11:05:59 JST
久保です。
> > ヌルポの発生箇所ですが、
> >
> > 【BasicHandler】
> > ValueType valueType = getValueType(argTypes[i]);
> > try {
> > valueType.bindValue(ps, i + 1, args[i]); // ★
> >
> > valueTypeがnullではないかと思えるところです。
> > どうやら10月11日にValueTypes.getValueType(clazz);が
> > nullを返すように変更されているみたいで、それが原因のようです。
> > ちょっとDBFlute側の対応は考え中です。
> >
> この辺は、S2JDBCの非互換性が見つかったので、直ぐに修正が入っています。
> ValueTypes.getValueType()は、引数がnullならObjectTypeを
> 返すように修正がはいっています。
おおっと、すいません。
ありがとうございます。
> 知らない型はnullを返すように変更したのは、
> 知らない型を適当にObjectTypeで処理するのは、
> 危険だし、データベースによる非互換性を生みやすいので
> はやめにnullぽで落ちて、対策を打ったほうが
> 堅いいう理由からです。
>
> S2Daoまでは、確認して大丈夫だったので修正したのですが、
> DBFluteで困ってます?
> 困っている場合は、本当に知らない型でしょうか?
> args[i]がnullならObjectTypeが返ってくるはずです。
なるほど理解しました。
DBFluteではどうしても仕組みの都合上、Object型として
扱っている箇所があるためでした。
ただ、そういう明確な理由があるのであれば、
BasicHandler.bindArgs()にて
ValueType valueType = ValueTypes.getValueType(argTypes[i]);
if (valueType == null) {
valueType = ValueTypes.getValueType(args[i]);
if (valueType == null) {
String msg = "不明な型:i=" + i + " argType=" + argTypes[i] + " args=args[i]";
throw new XxxException(msg);
}
}
というように、実際のValueの型でもgetValueType()をして
それでも無ければ、Exceptionというのはどうでしょうか?
これならば、本当に知らない型は例外となり、
実際はちゃんとした型だけとObject型で扱っている場合に、
正確な型のValueTypeで扱えるのではないかと思いました。
Seasar-user メーリングリストの案内