[seasar-dotnet:263] Re: [S2Dao]報告・要望:開発中に発生した出来事

Kazuya Sugimoto sugimotokazuya @ gmail.com
2006年 7月 3日 (月) 10:13:09 JST


杉本です。

久保さん、ご指摘ありがとうござます。
調査して対応していきたいと思います。

いつも助かります。

06/07/03 に kuboさんは書きました:
> 久保です。
>
> 開発中に発生した出来事を報告(質問/要望も!?)させて頂きます。
>
>
> <A>
>
> 現象:
> 自己参照FKをRELNOに設定すると、無限ループが発生する。
>
> 考察:
>
> DaoMetaDataImpl
> →new BeanMetaDataImpl();
> →SetupProperty()
> →CreateRelationPropertyType()
> →new RelationPropertyTypeImpl()
> →new BeanMetaDataImpl(beanType, dbMetaData, dbms);//★
> →SetupProperty()
>
> ここで、relationがfalseなので、(★のConstructorにてDefaultでfalse)
>
>     if(!relation)
>     {
>         IRelationPropertyType rpt = CreateRelationPropertyType(
>             beanType, pi, relnoAttr, dbMetaData, dbms);
>         AddRelationPropertyType(rpt);
>     }
>
> にまた入り、これが延々続きます。
>
> Java版では、このrelationは、
> 「relationとしてBeanMetaDataを生成する」場合にtrueとなります。
> つまり、★マークの部分ではtrueにして、
> 上述の if(!relation) には引っ掛からないようにするべきです(のはず)。
>
> 無限ループだけでなく、初期化すると、RELNOで繋がっているテーブル全てを
> 終点まで初期化してしまっています。
>
>
>
> <B>
>
> 現象:
> Where句におけるIN句条件のバインドで正常に実行されなかった。
>
> where mng_FreeSpace.action
> in /*dto.ConditionQuery.Action.InScope*/('a1', 'a2')
>
> ↓↓↓
>
> where mng_FreeSpace.action
> in ('A'.ConditionQuery.Action.InScope1, 'C'.ConditionQuery.Action.InScope2)
>
>
> 考察:
> すいませんが時間がなくて検証できてません。とりあえずプロジェクトで
> IN句が必要になることがなかったので保留課題としています。
>
> InScopeのプロパティは「System.Collections.IList」です。
> Java版では、上述のやり方で正常に動作しています。
>
> 吐き出されたSQLを見るに、Supportされていないと言うよりは、
> 何かちょっとした処理のミスで誤動作してしまっているように
> 見受けられます。
>
>
>
> <C>
>
> 現象:
> ID属性を設定すると、UPDATE時のPK列名が「Property名」になって
> SQLExceptionとなる。但し、明示的にColumn属性を付けるとOK。
>
> ex) free_id numeric(10) identity
>
>         [Seasar.Dao.Attrs.ID("identity")]
>         public Nullables.NullableDecimal FreeId {
>
> ↓↓↓
>
> where FreeId = xxx
>
> 考察:
> これもColumn属性を付けて回避しています。
> Java版で発生するかも検証しきれてません。
> (Program的にな差異も特に見つけられず・・・)
>
> DtoMetaDataImpl()#CreatePropertyType()を見ると、
> 当然の動きなのですが、この現象は仕様でしょうか?
>
>
>
> <D>
>
> 別のスレッドに投稿しましたが、IDとTimestamp属性のNullables対応です。
>
>
>
> <E>
>
> 現象:
> SqlCommentでスペルミスなので記述ミスをした場合のエラー内容が
> わかりにくい。
>
> 考察:
> CommandContextImpl.GetArg()の
>
> PropertyInfo pi = type.GetProperty(names[pos]);
> value = pi.GetValue(value, null);
>
> の部分ですが、piがNULLでNullReferenceExとなります。
> なので、何が間違っていたのかが全くわからない状態で終わります。
> (開発現場では結構痛い)
>
> 今、このように書き換えて対応しています。
>
> PropertyInfo pi = type.GetProperty(names[pos]);
> if (pi == null) {
>     String msg = "The sqlComment is invalid!";
>     msg = msg + " name=" + name + " type=" + type + " names[pos]=" + names[pos] + " pos=" + pos;
>     throw new SystemException(msg);
> }
> value = pi.GetValue(value, null);
>
> これで少なくとも開発者が何をスペルミスしたのかがわかります。
> 細かいところですが、対応して頂きたい箇所です。
>
>
>
>
> 一気に報告で申し訳ありませんが、対応をお願いしたいと思います。
> 特に「A」と「B」と「E」の内容は開発において結構クリティカルな
> ものなので、自分の以外のS2Daoユーザにとっても大事かと思います。
>
> ※ちなみに自分、一次リリースを「S2Dao書き換えバージョン」で
> リリースとなりました。二次では「ダウンロードしたままのS2Dao」で
> リリースしたいと考えております。
>
> お忙しいかと思いますが、よろしくお願いします。
>
>
>
> --
> kubo <jazzflute @ mbn.nifty.com>
>
>
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://www.seasar.org/mailman/listinfo/seasar-dotnet
>


-- 
Kazuya Sugimoto
http://d.hatena.ne.jp/sugimotokazuya/


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