[Seasar-user:13132] Re: VersionNoによる排他制御の値のインクリメントについて
Toshihiro Nakamura
[E-MAIL ADDRESS DELETED]
2008年 3月 3日 (月) 19:03:46 JST
中村(taedium)です。
> 自動更新SQLのVersionNoのインクリメントの制御についてお伺いします。
> 以前、[Seasar-user:10429]にて会話されている内容に関わる問題ですが、
> 使い方によっては排他にならないケースが出てくると思いメールしました。
報告ありがとうございます。
> この場合再実行してもエラーにしたいので、
> (つまり、再検索して新しいVersionNoにしないと更新できないようにしたい)
> 同じポインタのVersionNoを1インクリメントするのではなく、SQLの式を組み立てるときに
> 1インクリメントした値を代入する仕様が望ましいのですが、[Seasar-user:10429]の仕様と
> 相反する仕様になると思います。
>
> 例外が発生した場合は、業務ロジックで1戻す処理等をしなければならないでしょうか?
> 更新時に一律インクリメントする・しないを設定するオプション等があればうれしいのですが。
> また他に代案があればご教授願います。
S2Daoが無条件にBeanのVersionNoをインクリメントしてしまうのは、
そもそもまちがっているように思われます。
NotSingleRowUpdateRuntimeExceptionをスローするときは
インクリメントすべきではないですね。
瀧さんが指摘している通り、排他にならないケースが発生して
しまいます(リトライをする処理など)。
例外が発生するときは、インクリメントしないように修正する方向で
検討したいと思います。
--
Nakamura Toshihiro <[E-MAIL ADDRESS DELETED]>
Seasar-user メーリングリストの案内