【发布时间】:2016-01-08 20:10:46
【问题描述】:
我对 JPA 中 LockModeTypes 的工作感到困惑:
-
LockModeType.Optimistic- 它在提交时增加版本。
- 这里的问题是:如果我的实体中有版本列,并且如果我没有指定此锁定模式,那么它的工作方式也类似,那么它有什么用?
-
LockModeType.OPTIMISTIC_FORCE_INCREMENT- 即使实体没有更新,它也会增加版本列。
- 但是,如果任何其他进程在提交此事务之前更新了同一行,那么它有什么用呢?这笔交易无论如何都会失败。那么这个
LockModeType有什么用。
-
LockModeType.PESSIMISTIC_READ- 此锁定模式发出
select for update nowait(如果未指定提示超时).. - 所以基本上这意味着在提交该事务之前没有其他事务可以更新该行,那么它基本上是一个写锁,为什么它命名为
Read锁?
- 此锁定模式发出
-
LockModeType.PESSIMISTIC_WRITE- 此锁定模式还会发出
select for update nowait(如果未指定提示超时)。 - 这里的问题是这种锁定模式和
LockModeType.PESSIMISTIC_READ之间有什么区别,因为我看到两者都会触发相同的查询?
- 此锁定模式还会发出
-
LockModeType.PESSIMISTIC_FORCE_INCREMENT- 这会执行
select for update nowait(如果未指定提示超时),还会增加版本号。 - 我完全没有使用它。
- 如果有
for update no wait,为什么需要版本增量?
- 这会执行
【问题讨论】:
标签: oracle hibernate jpa concurrency transactions