【发布时间】:2019-03-30 00:11:37
【问题描述】:
当在提交当前事务之前休眠检查行的版本,它应该发出一个 sql select 语句来获取它。
假设在发出select 语句后休眠发现行版本没有改变,因此它应该继续提交事务。
我想知道 hibernate 如何确保在选择行和提交当前事务之间的时间段内没有任何其他事务会更新该行以更改其版本号? hibernate 唯一可能做的事情似乎是使用Select ... For Update 进行悲观锁定的行版本选择或具有这样一个隔离级别的事务,它将锁定正在读取的行。
如果我的想法是真的:
那么休眠乐观锁确实使用悲观锁来进行操作,尽管该悲观锁的持有时间很短,因为此后事务将立即提交。
否则,我们在行版本检查和提交之间的时间间隔很短,可能会出现竞争条件。
请分享你的想法。
【问题讨论】:
标签: sql hibernate race-condition optimistic-locking pessimistic-locking