2009年8月28日金曜日

Version Number パターンによる排他制御

Version Number パターンによる排他制御
Java, Seasar, SQL

http://d.hatena.ne.jp/r_ikeda/20090206/version

排他制御の実装パターンに Version Number パターンというものがある。

テーブルに INT 型の version_no というカラムを用意する。
UPDATE 時に version_no をインクリメントする。
UPDATE 時の WHERE 条件に version_no を追加する。
UPDATE dept
SET dept_no = ?, dept_name = ?, loc = ?, version_no = version_no + 1
WHERE id = ? AND version_no = ?
statement = connection.prepareStatement(UPDATE_SQL);
statement.setInt(1, dept.getDeptNo());
statement.setString(2, dept.getDeptName());
statement.setString(3, dept.getLoc());
statement.setInt(4, dept.getId());
statement.setInt(5, dept.getVersionNo());
これで自分以外の誰かが更新していた場合に version_no が合わない状態になるため、更新されない。S2Dao では自動でこれをやってくれる。

0 件のコメント:

マイブログ リスト


Jang ki hote

自己紹介