私は JPA 2.0 - EclipseLink を使用して倉庫管理システムに取り組んでおり、同時トランザクションを実装する必要性に遭遇しました。現在、数量が最後に変更されたとき (追加、削除、転送) を検証するためにタイムスタンプの違いを実装しています。
この戦略には少し欠陥があり、多くの手動検証が必要であり、バグが発生する可能性があります。JPA フレームワークで提供されているこれを行う別の方法はありますか?
私は JPA 2.0 - EclipseLink を使用して倉庫管理システムに取り組んでおり、同時トランザクションを実装する必要性に遭遇しました。現在、数量が最後に変更されたとき (追加、削除、転送) を検証するためにタイムスタンプの違いを実装しています。
この戦略には少し欠陥があり、多くの手動検証が必要であり、バグが発生する可能性があります。JPA フレームワークで提供されているこれを行う別の方法はありますか?
私が理解している限り、タイムスタンプを使用して楽観的なロック戦略を実装しようとしています。
JPA は、バージョン フィールドを使用して楽観的なロック メカニズムをすぐに使用できるようにします。基本的に、エンティティにバージョン フィールド ( short
、int
、long
またはTimestamp
) があり、エンティティが変更されるたびにインクリメント/設定されます。
保存時のエンティティのバージョンがロード時のバージョンと異なる場合、OptimisticLockingException
がスローされます。これは、別のユーザー/スレッドが間にエンティティを変更したことを意味します。この例外をキャッチして、何をするかを決定できます。
ユースケースによって異なります。