gpt4 book ai didi

java - 客户端-服务器应用程序的 JPA 悲观锁逻辑

转载 作者:行者123 更新时间:2023-12-02 03:29:23 27 4
gpt4 key购买 nike

我正在学习JPA悲观锁。我找到了以下解释

PESSIMISTIC_READ - The Entity is locked on the database, prevents anyother transaction from acquiring a PESSIMISTIC_WRITE lock.

PESSIMISTIC_WRITE - The Entity is locked on the database, prevents anyother transaction from acquiring a PESSIMISTIC_READ orPESSIMISTIC_WRITE lock.

如果我理解正确的话,那么如果我们有三个用户(A,B,C)并且用户A获得READ锁,那么用户B也可以获得READ锁,但用户C无法获得WRITE锁,直到用户A B 释放他们的锁。如果用户 A 获得了 WRITE 锁,则在用户 A 释放锁之前,用户 B 和用户 C 无法获得任何内容。

但是,对于我的客户端-服务器应用程序,我需要以下逻辑。如果用户只想读取一个实体,则可以以只读模式打开该实体(无限数量的用户可以同时执行此操作)。如果某个用户想要编辑实体,他会在写入模式下打开该实体 - 没有人可以在写入模式下打开同一实体(直到用户释放写入锁),但所有其他人仍然可以在只读模式下打开该实体。

我有两个问题:

  1. 我对JPA悲观锁的理解正确吗?
  2. 是否可以让 JPA 执行我需要的逻辑(使用 JPA 锁定机制)?

最佳答案

Is my understanding of JPA pessimistic lock right?

是的,这正是读/写锁定的工作原理

...but all other can still open the entity in READ-ONLY mode

我不太确定你的意思。我们仍然在谈论同时执行的多个事务,对吧(我有一种奇怪的感觉,这不是你的意思)?如果是这种情况,那么按照您的逻辑,持有“READ_ONLY”锁不会完成任何任务。

锁定意味着“我正在卡住此资源,以便某些其他事务在我完成之前无法继续”。但是,在您描述的逻辑中,当您持有“READ_ONLY”锁时,持有“READ_ONLY”锁的事务和持有“WRITE”锁的事务都允许继续进行。

关于java - 客户端-服务器应用程序的 JPA 悲观锁逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56893973/

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