我正在学习 JPA 悲观锁。我找到了以下解释PESSIMISTIC_READ - 实体在数据库上被锁定,防止任何其他事务获取 PESSIMISTIC_WRITE 锁。PESSIMISTIC_WRITE - 实体在数据库上被锁定,防止任何其他事务获取 PESSIMISTIC_READ 或 PESSIMISTIC_WRITE 锁。如果我理解正确的话,那么如果我们有三个用户(A,B,C),用户A获得READ锁,那么用户B也可以获得READ锁,但是用户C无法获得WRITE锁,直到用户A和B释放他们的锁。如果用户 A 获得 WRITE 锁,那么在用户 A 释放锁之前,用户 B 和用户 C 什么也得不到。但是,对于我的客户端-服务器应用程序,我需要以下逻辑。如果用户只想读取实体,则他们以只读模式打开实体(无限数量的用户可以同时进行)。如果某个用户想要编辑他在 WRITE 模式下打开它的实体 - 没有人可以在 WRITE 模式下打开同一个实体(直到用户释放 WRITE 锁)但所有其他人仍然可以在 READ-ONLY 模式下打开实体。我有两个问题:我对JPA悲观锁的理解对吗?是否可以让 JPA 执行我需要的逻辑(使用 JPA 锁定机制)?
1 回答
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
我对JPA悲观锁的理解对吗?
是的,这正是读/写锁定的工作原理
...但所有其他人仍然可以在 READ-ONLY 模式下打开实体
我不太确定你的意思。我们还是在说多个事务同时执行吧(我有种奇怪的感觉,不是你的意思)?如果是这种情况,那么按照您的逻辑,持有“READ_ONLY”锁将无济于事。
锁定意味着“我正在冻结此资源,以便某些其他事务在我完成之前无法继续”。但是,在您描述的逻辑中,当您持有“READ_ONLY”锁时,允许持有“READ_ONLY”锁的事务和持有“WRITE”锁的事务继续进行。
添加回答
举报
0/150
提交
取消