[Seasar-user:9403] Re: [DBFlute]JOIN 時の lockForUpdate について
kubo
[E-MAIL ADDRESS DELETED]
2007年 7月 24日 (火) 18:21:44 JST
久保です。
米原さん、こんにちは
> DBfluteにて、lockForUpdateのテーブル指定
> (FOR UPDATE OF 表.列名)
> を使用したい、との要件が挙がっています。
>
> 具体的には、「setupSelectXXX」にて外部TBLを結合して、
> さらに「lockForUpdate」にてロックを掛けた場合、
> 現状OF指定が無いため、Oracleでは、ローカルテーブルも
> 外部テーブルも(select対象の全てのTBL)lockが掛かって
> しまいます。
> よって現状、外出しにするか、ロックのみ別SQLにするか
> ということになると思います。
>
> DBFlute(CB)にてロックするテーブルを指定、もしくは
> ローカルテーブルのみロックするなど、対応可能でしょうか?
なるほど、込み入った機能を使い始めましたね。。。
lockForUpdateの仕様としては、
基本的には「ローカルテーブルのみLock」にしたいと考えていましたが、
Oracle上の厳密な挙動を自分が把握していませんでした。
申し訳ありませんが、Oracleの挙動に関して確認させて下さい。
Oracleに関して
for update → 結合している全てのTableをLock
for update of xxx → 指定されたColumnが定義されているTableをLock
という認識で合っていますでしょうか?
外部結合(left outer join)を利用したSelectでも
「for update of xxx」は利用できますでしょうか?
(文法エラーになったりしないかどうか)
「for update of xxx」のxxxに指定する列は主キーでしょうか?
(他の列も指定できるとしても主キーを指定するのが一般的でしょうか???)
もし、問題なさそうであれば、lockForUpdate()時は
for update of xxxを出力することを検討しようかと思いますので
もし知っていれば情報提供して頂けるとありがたいです。
Seasar-user メーリングリストの案内