Hibernate中的LockMode.PESSIMISTIC_WRITE和LockMode.UPGRADE_NOWAIT之间的区别

时间:2018-11-02 18:34:12

标签: hibernate

我正在阅读休眠中支持的不同锁定模式,但是无法理解LockMode.PESSIMISTIC_WRITE和LockMode.UPGRADE_NOWAIT的区别。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这两个都是排他锁,但是如果资源繁忙,第二个将触发异常,而第一个将等待。

休眠文档确实不是很清楚。

PESSIMISTIC_WRITE:“事务将立即获得数据库锁定。”

反对

UPGRADE_NOWAIT:“尝试使用Oracle风格的select等待更新来获取升级锁。关于nowait:Oracle will wait for any locks to be released unless you specify NOWAIT

但是,立即等待不是立即开始。 PESSIMISTIC_WRITE的“立即”是指会话范围(休眠将立即触发数据库锁,而不是像在WRITE模式下那样在第一次写操作时自动触发数据库锁),但是在这种模式下,数据库将等待其他锁释放而不是如果资源繁忙则触发异常(这是一个简单的select... for update语句)。

请注意,并非所有数据库都极有可能支持“ nowait”方案,例如mysql implemented it in version 8,在这种情况下,两种模式都是等效的。