0

私は JPA 2.0 - EclipseLink を使用して倉庫管理システムに取り組んでおり、同時トランザクションを実装する必要性に遭遇しました。現在、数量が最後に変更されたとき (追加、削除、転送) を検証するためにタイムスタンプの違いを実装しています。

この戦略には少し欠陥があり、多くの手動検証が必要であり、バグが発生する可能性があります。JPA フレームワークで提供されているこれを行う別の方法はありますか?

4

1 に答える 1

1

私が理解している限り、タイムスタンプを使用して楽観的なロック戦略を実装しようとしています。

JPA は、バージョン フィールドを使用して楽観的なロック メカニズムをすぐに使用できるようにします。基本的に、エンティティにバージョン フィールド ( shortintlongまたはTimestamp) があり、エンティティが変更されるたびにインクリメント/設定されます。

保存時のエンティティのバージョンがロード時のバージョンと異なる場合、OptimisticLockingExceptionがスローされます。これは、別のユーザー/スレッドが間にエンティティを変更したことを意味します。この例外をキャッチして、何をするかを決定できます。

  • 2 番目に保存したユーザーに変更を再開するように伝えます
  • 変更をマージします (可能な場合)
  • 上書き

ユースケースによって異なります。

参照:楽観的ロックに関する oracle javaee 6 チュートリアル

于 2012-09-08T12:12:16.147 に答える