我正在阅读休眠中支持的不同锁定模式,但是无法理解LockMode.PESSIMISTIC_WRITE和LockMode.UPGRADE_NOWAIT的区别。
非常感谢您的帮助。
答案 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,在这种情况下,两种模式都是等效的。