以下は、私が楽観的なロックを取得するために使用しているコードスニペットです。エンティティ内のデータを更新せずにオプティミスティックロックを取得する
setting = this.entityManager.find(Setting.class, id, LockModeType.OPTIMISTIC_FORCE_INCREMENT);
setting.setUpdateTimestamp(new Date()); // I want to make sure that this setting is not changed by
//any other module. So I am updating timestamp so that others will fail.
newSettingList.add(setting);
さて、エンティティ内のフィールドのいずれかを更新せずにこれを行うと楽観的ロックでその実体がない他のモジュールの変更を確認するために、他の方法があります。
同じデータに対して2つ以上のプロセスアクセスが同時に発生し、同時に変更しようとすると、楽観的ロックが発生します。複数のプロセスが同じデータを変更しているかどうかチェックしましたか? – Anil
はい。同じ設定データを変更できる並行処理があります。 – Vrishank
optimistic_force_increment単独では、ロックプロセスがコミットするまでデータが他のプロセスによって変更されないことを保証しますか?または更新ステートメントが必要ですか? – Vrishank