@Version
JPAでアノテーションはどのように機能しますか?
私は次のように抽出されたさまざまな答えを見つけました:
JPAはエンティティのバージョンフィールドを使用して、同じデータストアレコードに対する同時変更を検出します。JPAランタイムは、同じレコードを同時に変更する試みを検出すると、最後にコミットしようとしたトランザクションに例外をスローします。
しかし、それがどのように機能するかはまだわかりません。
次の行からも:
バージョンフィールドは不変と見なす必要があります。フィールド値を変更すると、未定義の結果が生じます。
バージョンフィールドを次のように宣言する必要があるという意味final
ですか?
UPDATE myentity SET mycolumn = 'new value', version = version + 1 WHERE version = [old.version]
。誰かがレコードを更新した場合old.version
、DB のレコードと一致しなくなり、where句によって更新が行われなくなります。「更新された行」はになります0
。JPAはこれを検出して、同時変更が発生したと結論付けることができます。