我读过这篇关于 JPA concurrency的文章,但要么我太厚,要么不够明确。
我正在寻找一个数据库控制的原子更新-if-found-else-insert 操作(一个UPSERT
)。
在我可怜的慢大脑看来,我可以——当然在一个事务中——运行一个锁定模式为 的命名查询PESSIMISTIC_WRITE
,看看它是否返回任何结果,然后是 apersist()
或 a update()
。
我不清楚的是使用PESSIMISTIC_WRITE
锁与PESSIMISTIC_READ
锁执行此操作之间的区别。我已经阅读了这些句子——我知道这PESSIMISTIC_READ
是为了防止不可重复读取,并且PESSIMISTIC_WRITE
是......好吧,也许我不太理解那个句子:-)——但在它下面只是一个 SQL SELECT FOR UPDATE
,是的? 在这两种情况下?