我读过这篇关于JPA并发的文章,但要么我太厚了,要么不够清楚。
我希望做一个数据库控制的原子更新-如果-如果-找到-其他-插入操作(一个UPSERT)。
在我可怜的大脑中,我可以--当然是在一个事务中--运行一个带有PESSIMISTIC_WRITE锁模式的命名查询,看看它是否返回任何结果,然后是persist()还是update()。
我不清楚使用PESSIMISTIC_WRITE锁和PESSIMISTIC_READ锁执行此操作之间的区别。我读过这些句子--我知道PESSIMISTIC_READ的目的是防止不可重复的读,PESSIMISTIC_WRITE is...well,也许我不太理解这个句子:-) --但下面只是一个SQL SELECT FOR UPDATE,对吗?在这两种情况下?
发布于 2010-09-30 20:17:55
我希望做一个数据库控制的原子更新-如果-如果-找到-其他-插入操作( UPSERT)。
我可能没有完全回答整个问题,但是如果您想在没有任何竞争条件的情况下实现上面的内容,您需要IMO在排他模式(不仅仅是行)中使用表级别的锁。我不知道JPA能不能做到这一点。也许你可以澄清什么是你可以接受的。
发布于 2013-02-20 22:52:15
面对这种情况,我发现:
悲观锁定,这意味着在事务开始时锁定对象,并且在事务期间保持锁由以下2 PessimisticLockModes:- LockModeType.PESSIMISTIC_READ -->实体完成,其他事务可以读取实体,但不能进行任何更改-- LockModeType.PESSIMISTIC_WRITE -->实体不能被其他事务读取或写入。
文章的链接
发布于 2017-04-30 18:15:24
我希望做一个数据库控制的原子更新-如果-如果-找到-其他-插入操作( UPSERT)。
https://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html就是这么做的。
https://stackoverflow.com/questions/3833847
复制相似问题