Dee*_*ija 3 java hibernate locking transactions pessimistic-locking
我有两个关于 Hibernate 3.3.2.ga 中提供的悲观 LockMode 的问题:
如果我使用锁定模式 UPGRADE 锁定一组行,当您移出事务范围时,锁是否会被释放?如果可以的话,我们可以跨事务加锁解锁吗?
对于以下场景,哪种 LockMode 会很有用
线程 1,尝试获取锁并锁定一组行
线程 2 尝试获取同一组行上的锁(与线程 1 锁定的行相同),此时线程 2 收到异常,指出行已锁定
哪种是最好的悲观 LockMode?
使用LockMode.UPGRADE ,因此在当前事务的整个持续时间内都select ... for update将保持锁定。释放锁的唯一方法是提交或回滚事务。
锁select ... for update将导致第二个事务等待第一个事务释放锁。如果你想快速失败,你需要使用:UPGRADE_NOWAIT,它将使用select ... for update no wait查询,如果无法获取锁则抛出异常(Oracle 和 PostgreSQL 支持)。
LockOptions或者,您可以按如下方式使用 Hibernate :
entityManager
.unwrap(Session.class)
.buildLockRequest(
new LockOptions(LockMode.PESSIMISTIC_WRITE)
.setTimeOut(LockOptions.NO_WAIT))
.lock(entity);
Run Code Online (Sandbox Code Playgroud)有关更多详细信息,请查看我在苏黎世 Voxxed Days 上发表的交易和并发控制演示。
| 归档时间: |
|
| 查看次数: |
5211 次 |
| 最近记录: |