[Seasar-user:18368] Re: [DBFlute] update での EntityAlreadyUpdatedException

kubo [E-MAIL ADDRESS DELETED]
2009年 8月 23日 (日) 14:21:32 JST


久保(jflute)です。

原因追及が進んだようで良かったです。
こういうときはログを真っ先にみて比較するのが
良いので今後もぜひ参考にして下さい。

あと個人的には、NumberFormatExceptionはcatchせずに
そのままthrowした方がいいのかなと思います。
(業務的に-1に意味があるのであれば仕方ないですが)

2009/8/23 HATTI <[E-MAIL ADDRESS DELETED]>:
> お世話になっております。
> hatti です。
>
> SQLログを比較してみたところ、
> 原因と思われる箇所がわかりました。
>
> なぜか bean.getIntUserId() の部分で、
> 「-1」が返されて存在しないデータを更新しようとしているようでした。
> getIntUserId() は userId を String -> Integer 変換しているメソッドなのですが、
> なぜか userId が null になってしまいNumberFormatException となってしまっているようです。
> (※Exceptionの際は -1 を返すようにしています。)
>
> 普通に、bean.userId と参照するとString で正常な値を取得できるのですが、
> デバッグを getIntUserId 内で止めると、bean のインスタンス変数が全て null になってしまっていました。
> bean は spring 管理下(CGLIB 使用)のオブジェクトなのですが、
> そこらへんが影響してるのかもしれません。
>
> 引き続き調査してみます。
> 大変お手数おかけいたしました。
>
> 以上、よろしくお願いいたします。
>
> 2009/08/23 10:20 に kubo<[E-MAIL ADDRESS DELETED]> さんは書きました:
>> 久保(jflute)です。
>>
>> hattiさん、こんにちは
>>
>> まずは、その二つのパターンのときのSQLのログを
>> 比較してみて下さい。
>>
>> 2009/8/23 HATTI <[E-MAIL ADDRESS DELETED]>:
>>> お世話になっております。
>>> hatti です。
>>>
>>> DBFlute9.5.3 (生成は 9.5.4-S) / OracleXE(10g) を使用しております。
>>> 特に急ぎの質問ではないため、時間のあるときに回答いただけるとありがたいです。
>>>
>>> あるテーブルを更新する際に、
>>> EntityAlreadyUpdatedException が発生してしまいます。
>>> 以下がそのコードです。
>>>
>>> **************************************************
>>>        public MstUser processUpdate(final UserBean bean) {
>>>                MstUser userEntity = new MstUser();
>>> //              Beans.copy(bean, userEntity).execute();
>>> *               userEntity.setUserId(bean.getIntUserId());
>>> *               userEntity.setVerNo(bean.verNo);
>>>                mstUserBhv.update(userEntity);
>>>                return userEntity;
>>>        }
>>> ***************************************************
>>> これはService クラスのメソッドです。
>>> Action -> Service -> Bhv という形の作りです。
>>>
>>> userEntity の setter を呼んで、userId/verNo をセットし、 update を呼ぶと例外になってしまいます。
>>> ただ、 setter (*) をコメント化し、 Beans.copy (//)を呼べば正常に更新ができます。
>>>
>>> Beans.copy は seasar の util です。
>>> (DIコンテナ自体は spring を使っていますが、、)
>>>
>>> なにか原因がお分かりになればご教示いただけると助かります。
>>> 以上、よろしくお願いいたします。
>>> _______________________________________________
>>> Seasar-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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