これは、Webアプリケーション/ Webサービスを介したメンバー登録のユースケースです。電話、住所などの複数の表を見て、メンバーが重複しているかどうかを確認するための複雑なアルゴリズムがあります。アルゴリズムはメンバーの国によって異なります。したがって、この制約は、主キー/一意キー制約を使用して実装することはできません。Oracleのユニークキーを使用せずに重複挿入を防止する
Javaコードでチェックしています。しかし、2つの同時リクエストが重複している場合、2つのJavaスレッドはメンバーが存在しないことを確認し、両方がレコードを挿入して重複していることを確認します。このような重複挿入を防止するにはどうすればよいですか?
私は、行レベルのロックやHibernateの楽観的な並行性を使用して更新を防ぐことができます。このような挿入を防ぐためにテーブルレベルのロックを考えることはできますが、更新をブロックする際にアプリケーションのパフォーマンスが制限されます。もう一つの選択肢は、id = 'memberInsert'のレコードを持つロックテーブルを作成し、このレコードの行レベルロックを取得するためにJDBC経由ですべての挿入を強制することだと思います。
おかげ Suneel
メンバーが重複しているかどうかを最初に確認してから、複数のスレッドを開始して、その知識に基づいて複数のことを行うことができます。 – rid
これらの要求は、Webブラウザ、Webサービスクライアントから取得できます。したがって、リクエストスレッドの作成は私のコントロールではありません。 – Suneel
最終的なテーブルに固有の制約がありますか?私は、あなたが複数のソースをチェックして完全性を確認しなければならない部分を理解しています。 – r0ast3d