リンクテーブルに追加のプロパティがある多対多の関係があります。したがって、リンク テーブルもエンティティ クラスで表され、 と呼ばれComposition
ます。の主キーComposition
は@Embeddable
、対応するエンティティへのリンクです。2@ManyToOne
参照。
ユーザーが 2 つの参照のいずれかを選択するときにエラーが発生する可能性があるため、複合主キーを更新する必要があります。ただし、JPA (休止状態) の仕組みにより、更新ではなく常に新しい行 (挿入) が作成され、古い行Composition
は引き続き存在します。最終的な結果は、更新される代わりに新しい行が追加されたことです。
オプション1:
新しいものを挿入する前に古いComposition
ものを削除することもできますが、これを処理する適切なメソッドには古いバージョンと新しいバージョンの両方が必要です。さらに、更新されたバージョンは実際には新しいエンティティであるため、楽観的ロックは機能せず、最後の更新が常に優先されます。
オプション 2:
ネイティブ クエリ。また、クエリはバージョン列をインクリメントし、WHERE 句にバージョンを含めます。更新回数が 0 の場合にスローOptimisticLockException
(同時変更または削除)
より良い選択は何ですか?この問題に対する「一般的なアプローチ」は何ですか?