当前位置: 首页 > 面试题库 >

PESSIMISTIC_WRITE是否锁定整个表?

路阳华
2023-03-14
问题内容

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

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

如果重要的话,我在说PostgreSQL


问题答案:

它应该仅阻止实体。

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



 类似资料:
  • 您可以在下面的问题中看到:(liquibase-lock-reasons)当Liquibase操作中断时客户端Liquibase锁定,使Liquibase处于锁定状态。 我想知道是否有一种方法可以配置Liquibase,使其从列中的日期和时间自动检测这种情况。我想如果你已经拿着锁一个小时了--你应该把它叫做过期锁。

  • 众所周知,有两种锁定策略:乐观锁定和悲观锁定 悲观锁定是锁定记录供您独占使用,直到您使用完它。它比乐观锁定具有更好的完整性,但是需要您小心应用程序设计以避免死锁。 也知道,乐观并发控制与多版本并发控制(Oracle或MSSQL-Snapshot/MVCC-RC)不同:乐观与多版本并发控制-差异? 但是,如果在两个事务中都使用OCC(乐观并发控制),会在两个交易之间发生死锁吗? 我们可以说乐观锁通过

  • 问题内容: 我正在编写一个使用本地SQL数据库存储数据的程序。 我正在使用在这里找到的驱动程序:https : //bitbucket.org/xerial/sqlite-jdbc 我试图从数据库中读取并将tableName的内容放入这样的JTable中: 然后,稍后我尝试返回并向表中添加一行: 然后,我想用新行更新之前创建的JTable。 但是,当我尝试添加行时会导致异常: 指向这一行: …在a

  • 我用discordjavaapi(JDA)编写了一个purge(clear)命令。 在斜杠命令的帮助下,我想检查消息是否被固定,以及当消息被固定时,应该跳过消息。我不熟悉用Java写东西,所以我什么都不懂

  • 问题内容: 如何确定给定的整数是否在其他两个整数之间(例如大于/等于10000和小于/等于30000)? 我使用的是2.3 IDLE,到目前为止,我一直没有尝试: 问题答案:

  • 如何确定给定整数是否介于其他两个整数之间(例如,大于/等于和小于/等于)? 我使用的是2.3 IDLE,到目前为止我所尝试的方法不起作用: