gpt4 book ai didi

java - JPA 中的 PESSIMISTIC_READ 和 PESSIMISTIC_WRITE 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 20:37:41 30 4
gpt4 key购买 nike

我已阅读文章 Locking and Concurrency in Java Persistence 2.0 ,并运行示例应用程序。但是我仍然无法意识到 PESSIMISTIC_READPESSIMISTIC_WRITE 之间的区别。我尝试修改代码,并且使用 PESSIMISTIC_READPESSIMISTIC_WRITE 的代码将具有与使用 for update 调用 SQL 相同的结果。

最佳答案

区别在于锁定机制。

PESSIMISTIC_READ 锁意味着当你有这样的锁时,脏读和不可重复读是不可能的。如果要更改数据,则需要获取 PESSIMISTIC_WRITE 锁定

PESSIMISTIC_WRITE 锁保证除了脏读和不可重复读之外,您可以在不获取额外锁的情况下更新数据(以及在等待排他锁时可能出现死锁)。

╔══════════════════════╦══════════════════════════╦══════════════════════════╗
║ LockModeType ║ PESSIMISTIC_READ ║ PESSIMISTIC_WRITE ║
╠══════════════════════╬══════════════════════════╬══════════════════════════╣
║ type ║ SHARED LOCK ║ EXCLUSIVE LOCK ║
╠══════════════════════╬══════════════════════════╬══════════════════════════╣
║ isReadOnly without ║ ║ ║
║ additional locks ║ YES ║ NO ║
╠══════════════════════╬══════════════════════════╬══════════════════════════╣
║ dirty reads ║ NO ║ NO ║
╠══════════════════════╬══════════════════════════╬══════════════════════════╣
║ non-repeatable reads ║ NO ║ NO ║
╠══════════════════════╬══════════════════════════╬══════════════════════════╣
║ how to update data ║ obtain PESSIMISTIC_WRITE ║ ALLOWED ║
╠══════════════════════╬══════════════════════════╬══════════════════════════╣
║ ║ no one holds ║ no one holds ║
║ how to obtain lock ║ PESSIMISTIC_WRITE ║ PESSIMISTIC_READ or ║
║ ║ ║ PESSIMISTIC_WRITE ║
╠══════════════════════╬══════════════════════════╬══════════════════════════╣
║ ║ ║ when there is a high ║
║ ║ you want to ensure no ║ likelihood of deadlock or║
║ when to use ║ dirty or non-repeatable ║ update failure among ║
║ ║ reads are possible ║ concurrent updating ║
║ ║ ║ transactions ║
╚══════════════════════╩══════════════════════════╩══════════════════════════╝

资源:

JPA 2.1

关于java - JPA 中的 PESSIMISTIC_READ 和 PESSIMISTIC_WRITE 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1657124/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com