LockModeType.PESSIMISTIC_WRITE是否足以支持JPA中的UPSERT?

Lai*_*son 8 concurrency jpa upsert pessimistic-locking

我已经阅读了关于JPA并发性的这篇文章,但要么我太厚,要么不够明确.

我期待做一个数据库控制的原子更新-if-found-else-insert操作(一UPSERT).

看起来我可怜的慢脑,我可以 - 在一个事务中 - 运行一个锁定模式的命名查询PESSIMISTIC_WRITE,看它是否返回任何结果,然后是a persist()update()之后.

我不清楚的是使用PESSIMISTIC_WRITE锁和PESSIMISTIC_READ锁进行此操作之间的区别.我已经阅读了句子 - 我明白这PESSIMISTIC_READ是为了防止不可重复的读取,并且PESSIMISTIC_WRITE......好吧,也许我不太了解那个:-) - 但它下面只是一个SQL SELECT FOR UPDATE,是的?在这两种情况下?

Pas*_*ent 4

我正在寻求执行数据库控制的原子 update-if-found-else-insert 操作(UPSERT)。

我可能没有完全回答整个问题,但如果您想在没有任何竞争条件的情况下实现上述内容,则需要在 IMO 中使用表级锁定(不仅仅是行)。不知道JPA能不能实现这个功能。也许您可以澄清什么对您来说是可以接受的。