いづのです。
現在のS2JDBCのVersionカラムの仕様だと以下のような操作に対して、排他制御が無効になってしまいます。
1.新規レコードを作成
2.そのレコードをAとBの画面で表示。
3.A画面でレコードを物理削除
4.A画面で同じキーで新規レコードを作成
5.B画面で更新
S2JDBCとしてはこのような操作に対する排他制御は現在の仕様上対応出来ないと思っていますが、それは正しいでしょうか。
その場合、現在以下のような対応方法を検討しています。
・Versionカラムを日付型に対応するよう拡張する
・S2JDBCをやめる⇒S2Daoに乗り換え
他になにか良い方法ないでしょうか
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ひがです。
主キーを代理キー(@GeneratedValue)を使うようにするのが、
一番簡単だと思います。
ビジネスキーを主キーにするのは、レガシーマイグレーション以外では
お勧めしません。
3,4の操作は、普通は、更新でやると思うのですが、
このようなホストっぽい操作をするときは
1の後にダミーで一回更新することで、
versionが更新されるので、5で排他エラーになります。
*サロゲートキー
データベーステーブルの主キーとして導入された、ビジネス上の意味を持たない、連番などのキー。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
いづのです。
> 主キーを代理キー(@GeneratedValue)を使うようにするのが、
> 一番簡単だと思います。
>
> ビジネスキーを主キーにするのは、レガシーマイグレーション以外では
> お勧めしません。
今回はそのレガシーマイグレーションなんです。
> 3,4の操作は、普通は、更新でやると思うのですが、
> このようなホストっぽい操作をするときは
> 1の後にダミーで一回更新することで、
> versionが更新されるので、5で排他エラーになります。
排他制御用のカラムに日付をサポートしていないのは、恐らくサロゲートキーがあるからだと思ってました。
やっぱりそうですね。
ではサロゲートキーを使用していない場合、以下のケースでは排他制御は無理ということですよね。
>1.新規レコードを作成
>2.そのレコードをAとBの画面で表示。
>3.A画面でレコードを物理削除
>4.A画面で同じキーで新規レコードを作成
>5.B画面で更新
なにか対処方があればヒントをいただけるとありがたいです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ひがです。
> いづのです。
>
> ではサロゲートキーを使用していない場合、以下のケースでは排他制御は無理ということですよね。
>
> >1.新規レコードを作成
> >2.そのレコードをAとBの画面で表示。
> >3.A画面でレコードを物理削除
> >4.A画面で同じキーで新規レコードを作成
> >5.B画面で更新
>
> なにか対処方があればヒントをいただけるとありがたいです。
今回、@VersionでTimestampサポートも必要だということがわかりました。
S2JDBC自体でTimestampサポートを検討したいと思います。
ただ、次のバージョンが出るのは、来年の初めだと思うので、
それまで待てない場合は、ご面倒をおかけしますが、
S2JDBCを独自に拡張してください。
よろしくお願いします。
ひがです。
> いづのです。
>
> ではサロゲートキーを使用していない場合、以下のケースでは排他制御は無理ということですよね。
>
> >1.新規レコードを作成
> >2.そのレコードをAとBの画面で表示。
> >3.A画面でレコードを物理削除
> >4.A画面で同じキーで新規レコードを作成
> >5.B画面で更新
>
> なにか対処方があればヒントをいただけるとありがたいです。
今回、@VersionでTimestampサポートも必要だということがわかりました。
S2JDBC自体でTimestampサポートを検討したいと思います。
ただ、次のバージョンが出るのは、来年の初めだと思うので、
それまで待てない場合は、ご面倒をおかけしますが、
S2JDBCを独自に拡張してください。
よろしくお願いします。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
小林 (koichik) です.
Date: Wed, 17 Dec 2008 13:02:48 +0900
From: "IZUNO Tadashi" <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:16522] Re: [S2JDBC] 排他制御について
> ではサロゲートキーを使用していない場合、以下のケースでは排他制御は無理ということですよね。
>
> >1.新規レコードを作成
> >2.そのレコードをAとBの画面で表示。
> >3.A画面でレコードを物理削除
> >4.A画面で同じキーで新規レコードを作成
> >5.B画面で更新
>
> なにか対処方があればヒントをいただけるとありがたいです。
insert するエンティティのバージョンカラムに
タイムスタンプ (long 値) を設定すればよいかと.
Entity e = new Entity();
e.version = System.currentTimeMillis();
...
jdbcManager.insert(e).execute();
version フィールドの初期値をタイムスタンプに
してしまってもいいかも.
public class Entity {
...
@Version
public Long version = System.currentTimeMillis();
}
insert 時,version プロパティの値が null または
0 以下の場合は初期値として 1 が設定されますが,
1 以上の場合はそれがそのまま version カラムの
初期値になります.
Date: Wed, 17 Dec 2008 13:54:05 +0900
From: Yasuo Higa <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:16523] Re: [S2JDBC] 排他制御について
> 今回、@VersionでTimestampサポートも必要だということがわかりました。
> S2JDBC自体でTimestampサポートを検討したいと思います。
Timestamp 型をサポートしなくても大丈夫じゃ
ないかなー.
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ブログ アーカイブ
-
▼
2009
(28)
-
▼
8月
(28)
- JavaScript와 Ajax를 이용한 비동기식
- link
- タグファイル
- [DB]ナチャラルキー(自然キー)とサロゲートキー(代替キー)
- Version Number パターンによる排他制御
- [S2JDBC]排他制御について
- jquery - iframe
- jdk api window help file format
- Javaの理論と実践: 並行コレクション・クラス
- Tigerでのアノテーション 第1回: Javaコードにメタデータを追加する
- 実用的なXML: Java NIOへの取り組み バッファーおよびチャネルに寄り道する方法
- java.io VS java.nio
- XLSBeansExcelとJavaBeansをJava 5のアノテーションでマッピングするためのラ...
- Windows XP で使用可能なショートカット キー一覧
- Windows ショートカットキー
- 「設計書(Excelブック形式)からソースコードを自動生成」してしまう「blanco Framewo...
- Trac
- struts menuを利用したサンプルリンク集
- 개발 환경 구축 pukiwiki
- pukiwiki intall 1 - php + apache + mysql setup
- pukiwiki
- maven setup
- maven setup
- 第3回Seasar勉強会
- OGNL
- JSON-libでXMLのJSON化
- アノテーションのアノテーション
- s2strutsとsastrutsの違い
-
▼
8月
(28)
マイブログ リスト

Jang ki hote
0 件のコメント:
コメントを投稿