playframework1.2.7の時点で、同梱されているJPAのバージョンは2.0。 ロックタイプとして以下の5種類が選択できる。 - OPTIMISTIC
- OPTIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_READ
- PESSIMISTIC_WRITE
- PESSIMISTIC_FORCE_INCREMENT
OPTIMISTICは楽観ロック、PRESSIMISTICは悲観ロックを意味する。
楽観ロックはJPA1.0で対応していたロック(READ/WRITE)に対応するもの。 @Versionを使用したバージョン更新を行うエンティティ専用。
OPTIMISTIC
更新のコミット時のみ、対象データをロックし、バージョン更新をする。
OPTIMISTIC_FORCE_INCREMENT 更新時だけでなく参照しただけでも、対象データをロックし、バージョン更新をする。
悲観ロックは、@Versionのバージョン管理が無くても使用できる。(一部不可)
エンティティを参照した時点で、対象データがロックされる。コミット時に解放される。
エンティティを更新した時点で、対象データがロックされる。 データ参照だけではロックされないので、参照→更新の間に他者に割り込まれる可能性がある。
PESSIMISTIC_FORCE_INCREMENT @Versionのバージョン管理が前提。 更新時だけでなく参照しただけでも、対象データをロックし、バージョン更新をする。
SELECT FOR UPDATEでロックしつつデータ取得、更新して、コミット。という流れを実現するのであれば、PESSIMISTIC_READが相当する。 |