一尘不染

PESSIMISTIC_WRITE是否锁定整个表?

hibernate

只是为了确保我正确地理解了事情是如何工作的。

如果我愿意em.lock(employee, LockModeType.PESSIMISTIC_WRITE);,它将仅阻止此实体(employee)还是整个表Employees

如果重要的话,我在说PostgreSQL


阅读 342

收藏
2020-06-20

共1个答案

一尘不染

它应该仅阻止实体。

PostgreSQLhibernate方言会for update在写入锁定的情况下添加:https :
//github.com/hibernate/hibernate-orm/blob/master/hibernate-
core/src/main/java/org/hibernate/dialect/PostgreSQL81Dialect.java#L549
(较新的版本只使用相同的实现)

for updatePostgreSQL按行进行处理: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将等待在同一行上运行了任何这些命令的并发事务,然后将锁定并返回更新的行(如果删除了该行,则不返回任何行)。

2020-06-20