And*_*niy 7 java postgresql hibernate jpa locking
只是为了确保我正确理解事情是如何运作的.
如果我这样做em.lock(employee, LockModeType.PESSIMISTIC_WRITE);
- 它会只阻止这个实体(employee
)或整个表Employees
吗?
如果重要,我在谈论PostgreSQL
.
它应该仅阻止实体。
PostgreSQL休眠方言会for update
在写入锁定的情况下添加:https :
//github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/dialect/PostgreSQL81Dialect.java#L549
(较新的版本只使用相同的实现)
for update
PostgreSQL按行进行处理:https :
//www.postgresql.org/docs/9.5/static/explicit-locking.html
FOR UPDATE导致SELECT语句检索的行被锁定,就像要进行更新一样。这样可以防止它们被其他事务锁定,修改或删除,直到当前事务结束为止。也就是说,将阻止其他尝试进行这些行的UPDATE,DELETE,SELECT FOR UPDATE,SELECT FOR NO KEY UPDATE,SELECT FOR SHARE或SELECT FOR KEY SHARE的事务,直到当前事务结束为止。相反,SELECT FOR UPDATE将等待在同一行上运行了任何这些命令的并发事务,然后将锁定并返回更新的行(如果删除了该行,则不返回任何行)。
归档时间: |
|
查看次数: |
1241 次 |
最近记录: |