[Seasar-user:1342] S2Dao の更新処理 (Timestamp による排他制御付き ) で例外が発生します。

kamikawa@bbreak.co.jp kamikawa
2004年 12月 10日 (金) 14:36:30 JST


はじめまして、上川と申します。

S2Dao(1.0.12)を使って、「Timestampによる排他制御」を用いた更新処理を実行すると、
DBの更新が終わった後に、以下のような例外が発生します。
----------------------------------------
java.lang.ArrayIndexOutOfBoundsException: 17
        at org.seasar.dao.impl.UpdateAutoHandler.updateBean(UpdateAutoHandler.java:47)
        at org.seasar.dao.impl.AbstractAutoHandler.execute(AbstractAutoHandler.java:64)
        at org.seasar.dao.impl.AbstractAutoHandler.execute(AbstractAutoHandler.java:45)
        at org.seasar.dao.impl.AbstractAutoStaticCommand.execute(AbstractAutoStaticCommand.java:22)
        at org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:37)
...(省略)
----------------------------------------
こちらで使用している、更新するオブジェクトのクラスには、
検索時にしか使わないCOLUMNアノテーション定数を宣言しております。
# 即ち、クラスに対応するテーブルのカラム数より多いCOLUMNアノテーション定数を宣言している。

このようなエラーが発生する場合の回避策は、どのようになるでしょうか。
それとも、「カラム数より多いCOLUMNアノテーション定数を宣言する」という、
使い方が邪道なのでしょうか?
# 検索用と更新用でクラスを分ければ良いと言われれば、それまでですが...


一応、ソース(org.seasar.dao.impl.UpdateAutoHandler#updateBean(Object, Object[]))を見てみたところ、
DBテーブルを更新した後に、Javaオブジェクトのtimestamp値を更新するために、
----------------------------------------
        if (bmd.hasTimestampPropertyType()) {
            for (int i = 0; i < bmd.getPropertyTypeSize(); ++i) {
                PropertyType pt = bmd.getPropertyType(i);
                if (pt.isPersistent()
                        && !pt.isPrimaryKey()
                        && !pt.getPropertyName().equals(
                                BeanMetaData.VERSION_NO_PROPERTY_NAME)
                        && pt.getPropertyName().equalsIgnoreCase(
                                BeanMetaData.TIMESTAMP_PROPERTY_NAME)) {

                    PropertyDesc pd = pt.getPropertyDesc();
                    pd.setValue(bean, bindVariables[i]);
                }
            }
        }
----------------------------------------
という処理をしているので、
 ・ifに入って一度更新したら、returnする。
 ・bindVariablesのlengthを気にする。
等で、ソース的には回避できるかな、という気はしています。

以上、よろしくお願い致します。
--
上川伸彦 <[E-MAIL ADDRESS DELETED]>
株式会社ビーブレイクシステムズ - http://www.bbreak.co.jp
東京都品川区西五反田2-28-2-5F : 03-5487-7855




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