アプリケーションにログインしている 3 人のユーザー (たとえば、A、B、C) がいます。ユーザーAがDB(従業員オブジェクトなど)にオブジェクト(hibernateを使用)を保存する場合、ビジネスロジックを実装しました。これは、従業員テーブルで「重複」処理状態としてマークされます(すべてのレコードには、成功、エラー、重複などの処理状態があります) )。同期ブロックに従業員オブジェクトを永続化したコードブロックを入れました。しかし、私の問題は、「3人のユーザー全員が従業員の保存ボタンを同時にクリックすると、3つのオブジェクトがDBに保存され、同期ブロックのコードが3人のユーザー全員に対してシリアルに実行されますが、オブジェクトが同時にDBに保存されるためです。レコードを重複としてマークできません (オブジェクトを保存する前に、処理状態をチェックしています)。3つすべてが[従業員の保存]ボタンを同時にクリックした場合、オブジェクトを1つずつ保存したいのですが、
私は以下のようにコードを実装しました
synchronized(this){
find processing state of each records.
if record is have success status mark as duplicate
else save the object in DB with status proccesing (by using hibernate)
save function is {
session().save(object) (hibernate session )
session().flush();
}
// do some other work
update the records status success
}// close the synchronized block
最初のユーザーがレコードを正常に保存した場合。しかし、私はレコードステータス「他の使用のための成功」を取得できません
助けてください
ありがとう