[Seasar-user:3543] Re: S2Dao 仕様確認

Hirotaka HONMA [E-MAIL ADDRESS DELETED]
2006年 4月 24日 (月) 15:10:42 JST


ほんまです。

On 4/17/06, Ito Yoshiichi <[E-MAIL ADDRESS DELETED]> wrote:
> いつもお世話になってます。
> 伊藤です。
>
> S2Dao の仕様について確認をお願いします。
> 更新系のメソッドですが、戻り値を int にした場合、
> 更新した行数が戻り値になるという仕様ですよね。
> また、以前私が要望を出して、
> 戻り値が void でかつ throws XXX を記述した場合は、
> 結果が0件の場合、例外をあげるという対応をしていただいたと
> 記憶しています。
>
> 現在 S2Dao 1.0.29 を使用しているのですが、
> 更新件数が1以外の場合、無条件に例外を投げているように
> 見受けられます。
>
> 具体的には、AbstractAutoStaticCommand の以下の箇所で
> 例外が発生します。
>
>     public Object execute(Object[] args) {
>         AbstractAutoHandler handler = createAutoHandler();
>         handler.setSql(getSql());
>         int rows = handler.execute(args);
>         if (rows != 1) {
>             throw new NotSingleRowUpdatedRuntimeException(args[0], rows);
>         }
>         return new Integer(rows);
>     }
>
> 不具合なのか、現在はこのような仕様になっているのか、
> 確認をお願いいたします。

AssertAtLeastOneRowInterceptorを作成しました。
このinterceptorを適用すると、更新行数が0件の場合に例外を投げ
ます。(Daoの戻りはint等の数値である必要があります。)

同様に、更新行数が1件以外の場合に例外を投げる
AssertExactlyOneRowInterceptorも作成しました。

DaoへこれらAspectを組み込むことでご希望を満たせると思うので
すが、いかがでしょうか?
# SVNへコミットしてあります

また、AbstractAutoStaticCommand#executeではPKで更新するため、
1件以外の場合に例外を投げるという現状のロジックで良いのでは
と思っています。

よろしくお願いします。



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