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