JPAの悲観ロック
1308 ワード
JPA仕様では、3つのタイプの悲観的ロックが定義されています. . . が追加されました.
いずれも
From Pessimistic Locking in JPA. Last modified: May 26, 2019
PESSIMISTIC_READ
–共有ロックの取得とデータの更新または削除を許可するPESSIMISTIC_WRITE
–排他ロックの取得を許可し、データの読み取り、更新または削除を防止するPESSIMISTIC_FORCE_INCREMENT
–悲観PESSIMISTIC_WRITE
と同様に、バージョン化エンティティのバージョン属性いずれも
LockModeType
クラスに定義されています.// find
entityManager.find(User.class, id, LockModeType.PESSIMISTIC_READ);
// query
entityManager.createQuery("from User where id = :id")
.setParameter("id", id)
.setLockMode(LockModeType.PESSIMISTIC_WRITE)
.getResultList()
// named query
@NamedQuery(
name="lockUser",
query="select s from User s where s.id = :id",
lockMode = PESSIMISTIC_READ
)
// Lock Scope
Map properties = new HashMap<>();
map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED);
entityManager.find(User.class, 1L, LockModeType.PESSIMISTIC_WRITE, properties);
// Setting Lock Timeout - milliseconds
Map properties = new HashMap<>();
map.put("javax.persistence.lock.timeout", 1000L);
entityManager.find(User.class, 1L, LockModeType.PESSIMISTIC_READ, properties);
From Pessimistic Locking in JPA. Last modified: May 26, 2019