-
– Spring Web Flow 2 でのフロー・マネージド・パーシスタンスフロー・マネージド・パーシスタンスにおける OptimisticLockingFailureException
オプティミスティック・ロックは、データベースに物理的なロックを設定することなくデータ保全性を保証する、極めて効果的な並行性制御方式です。強制まではしませんが、フロー・マネージド・パーシスタンスではオプティミスティック・ロックを使用することを是非ともお勧めします。
パーシスタンス・コンテキストはフラッシュ時にエンティティーのバージョンをチェックし、エンティティーに対する同時変更を検出した場合には
OptimisticLockingFailureException(Hibernate でのStaleObjectExceptionに相当) をスローします。メモリー内でのエンティティーの存続時間が長ければ長いほど、エンティティーに対応するデータベース値が他のプロセスによって変更される可能性が高くなります。Open Session in View パターンでは、前述のとおりエンティティーの永続状態はユーザー・リクエストに依存します。エンティティーが分離されると、その後のユーザー・リクエストでは一般に、エンティティーの永続状態をリストアするためのマージ/再アタッチ/再ロード操作が必要となります。この操作によって、エンティティーとそれに対応するデータベース値が同期されるからです。