IはCrudRepositoryを拡張私のインターフェースでこの方法を持っています。私は何を期待スプリングデータPESSIMISTIC_WRITE戻る古いDB値
(私は私のDBに残っ1つのバウチャーを持っていることを前提としてい):
の1-サービスAとB VoucherFetchComponent
2 - サービスA(のフェッチ()メソッドを呼び出しますまたはB)行をロックし、フィールドの1つを更新して返します。
3他のサービスはロックされた行にアクセスできるようになりました。しかし、クエリは指定された条件(used = false)と一致しないため、nullを返します。
私はちょうど
上記、3-よう
1と2を得る他にどのようなサービスは、パラメータ(偽=使用)を持っていますが、それは以前に更新されていた古いオブジェクトを返します!
進捗はありません。 2番目のサービスがsave()メソッドを呼び出してエンティティを更新したい場合、OptimisticLockExceptionがスローされます。 findTop1ByUsedFalseAndProductOrderByIdAscメソッドが同じ値を返さないようにしたい – MoeKav
メソッドがロックされたエンティティをクエリしようとすると、ロック例外が発生します...それらを処理する標準的な方法は、try {catch {トランザクションメソッドを実行し、例外を再試行してください(トランザクションはロールバックされ、新しいトランザクションを開始する必要があります)。ロックが解除されると、2番目のサービスがメソッドに入り、nullが返されます。 –