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