はじめに JPAでのロックの基本は楽観的ロック(Optimisstic Loc)です。楽観的ロックは、アノテーションを使って、すべてのエンティティにあらかじめ適用しておくことができます。 楽観的ロックでは、ロックが有効になるのは、トランザクションの最後、つまり、データがコミットされる時です。したがって、トランザクションの途中では、他のトランザクションが同じデータを読み込んだり、あるいは更新してコミットしてしまうこともあり得ます。 そこで、コミットする直前、同じレコードを他のトランザクションが更新していないかどうか調べます。ここで何もなければ、それでOK、データをコミットして終わりです。 しかし、運が悪ければ、他のトランザクションがすでにデータを更新したことが分かり、処理を継続できなくなります。OptimisticLockExceptionという例外を投げてトランザクションを失敗させ、変更は