0

user_1 と user_2 が、id = 101、name = Rahul、accountBalance = 1500 の従業員に同時にアクセスしたとします。そのため、両方のユーザーが上記の値を持つ従業員を手にしています。User_1 は accountBalance に 1000 を追加し、従業員を更新しました。彼の残高は現在データベースで 2500 です。

そして、user_1 が従業員を更新した直後に、user_2 が口座残高に 500 を追加します。そのため、現在 user_2 の手元にある従業員の口座残高に 500 が追加されます。したがって、1500+500 = 2000 です。

しかし、実際には (1500+1000)+500 = 3000 のはずです。

この問題は、休止状態のJavaでどのように処理されますか?

ビジネス メソッド updateEmployee() で最新の値をもう一度確認してから、その新しい accountBalance に金額を追加しますか?

この状況を適切な方法で処理するのを手伝ってください。感謝とよろしく

4

2 に答える 2

2

これを行うには、@ Versionで注釈が付けられたフィールドを使用して、楽観的ロックを有効にします。更新のたびに、Hibernateはデータベース内のバージョンがメモリ内と同じであることを確認し、バージョンをインクリメントします。バージョンが一致しない場合、例外がスローされます。

ドキュメントの楽観的ロックについての詳細。

于 2012-07-03T05:55:45.690 に答える
1

Hibernate のユーザー バージョン管理の概念。その場合、user_2 が同じレコードを更新すると、hibernate は更新前に同じレコードが変更されていることを確認し、変更されている場合は例外をスローします。そのため、アプリはその例外を処理し、user_2 にレコードの変更を通知してレコードをリロードさせる必要があります。また。

于 2012-07-03T06:01:26.720 に答える