playframework1‎ > ‎jpa‎ > ‎

ロックの種類

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_READ
エンティティを参照した時点で、対象データがロックされる。コミット時に解放される。
PESSIMISTIC_WRITE
エンティティを更新した時点で、対象データがロックされる。
データ参照だけではロックされないので、参照→更新の間に他者に割り込まれる可能性がある。
ロックはコミット時に解放される。
PESSIMISTIC_FORCE_INCREMENT
@Versionのバージョン管理が前提。
更新時だけでなく参照しただけでも、対象データをロックし、バージョン更新をする。
コミット時に解放される。

SELECT FOR UPDATEでロックしつつデータ取得、更新して、コミット。という流れを実現するのであれば、PESSIMISTIC_READが相当する。


参考:
Comments