根据Java Persistent/Locking wikibooks *,处理锁的最佳方法是向用户报告乐观锁错误/异常。
问题在于它不可扩展。假设我有许多用户可能以相同的操作导致锁定。用户不在乎锁定错误消息。
简而言之 :
*
最佳答案
用户将关心该消息,因为他想进行一些修改,并且尚未进行修改。因此,他将刷新页面以查看数据的新状态,并重做他的修改,或决定在给出新状态后不再进行修改。
如果两个用户同时修改一个实体,并且无论最后一个修改成功,无论修改是什么,都会有问题吗?如果有问题,请使用乐观锁定,并在出现问题时通知您的用户。没有办法解决。
如果这不是问题,请不要使用乐观锁定。最后的修改(如果它没有破坏数据库中的约束)将始终获胜。但是让并发用户修改相同数据将总是导致异常(例如,因为某些用户可能在其他用户向同一实体提交修改之前删除该实体)。
重试不是一种选择:
您的问题可以用汽车类比来解释。假设您选择购买带有限速器的汽车,以确保您不违反限速规定。现在您问:但是我不在乎速度限制。我不应该总是禁用速度限制器吗?您可以,但是如果您被警察抓到了,不要感到惊讶。