Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 悲观的写入是否锁定了整个表?_Java_Postgresql_Hibernate_Jpa_Locking - Fatal编程技术网

Java 悲观的写入是否锁定了整个表?

Java 悲观的写入是否锁定了整个表?,java,postgresql,hibernate,jpa,locking,Java,Postgresql,Hibernate,Jpa,Locking,只是为了确保我正确理解事情的运作方式 如果我做了em.lock(employee,LockModeType.悲观的_-WRITE)-它是否仅阻止此实体(employee)或整个表Employees 如果它重要的话,我说的是PostgreSQL它应该只阻止实体 PostgreSQL hibernate方言在写入锁定的情况下为更新添加: (较新版本仅使用相同的实现) 更新的由PostgreSQL按行处理: FOR UPDATE使SELECT语句检索到的行 已锁定,好像要更新。这样可以防止它们被锁定

只是为了确保我正确理解事情的运作方式

如果我做了
em.lock(employee,LockModeType.悲观的_-WRITE)-它是否仅阻止此实体(
employee
)或整个表
Employees


如果它重要的话,我说的是
PostgreSQL

它应该只阻止实体

PostgreSQL hibernate方言在写入锁定的情况下为更新添加
:
(较新版本仅使用相同的实现)

更新的
由PostgreSQL按行处理:

FOR UPDATE使SELECT语句检索到的行 已锁定,好像要更新。这样可以防止它们被锁定, 被其他交易记录修改或删除,直到当前 交易结束。即,尝试更新的其他事务, 删除,选择更新,选择无密钥更新,选择共享 或选择这些行的键共享将被阻止,直到 当前交易结束;相反,选择更新将等待 已在服务器上运行任何这些命令的并发事务 相同的行,然后将锁定并返回更新的行(如果需要,则不返回行) 该行已被删除)


它不是的副本,因为我有一个具体的问题:它是否会锁定整个表以使其更有趣
LockModeType。MSSQL中悲观的写入将转换为
with(updlock,rowlock)
,其中rowlock可以完全升级到表或页面,因为这只是一个提示。更有趣的是,进行查询以查找一些不属于覆盖非聚集索引(或聚集索引)的条目仍然会相互阻塞。。。你真的必须仔细观察并理解数据库将做些什么。我知道——这正是我的观点(我希望我能把它传递给你)——看看生成的查询,试着理解它们,不要盲目相信hibernate(或任何其他工具)@Eugene,是的,我明白你的观点。看,告诉过你;)所以你得到了正确的行保证?如果您选择一行,也就是说,如果有一系列被触摸的行呢?