根据Java Persistent/Locking wikibooks *,处理锁的最佳方法是向用户报告乐观锁错误/异常。

问题在于它不可扩展。假设我有许多用户可能以相同的操作导致锁定。用户不在乎锁定错误消息。

简而言之 :

  • 最好的方法是禁用所有锁定?
  • 最好的方法是向用户报告错误锁定消息?但是,用户必须重试其操作,直到操作成功!
  • 最好的方法是重试事务,直到没有锁定?


  • *

    最佳答案

    用户将关心该消息,因为他想进行一些修改,并且尚未进行修改。因此,他将刷新页面以查看数据的新状态,并重做他的修改,或决定在给出新状态后不再进行修改。

    如果两个用户同时修改一个实体,并且无论最后一个修改成功,无论修改是什么,都会有问题吗?如果有问题,请使用乐观锁定,并在出现问题时通知您的用户。没有办法解决。

    如果这不是问题,请不要使用乐观锁定。最后的修改(如果它没有破坏数据库中的约束)将始终获胜。但是让并发用户修改相同数据将总是导致异常(例如,因为某些用户可能在其他用户向同一实体提交修改之前删除该实体)。

    重试不是一种选择:

  • 要么它会再次失败,因为修改
  • 是不可能的
  • 或它将成功,但首先会挫败乐观锁定的观点。

  • 您的问题可以用汽车类比来解释。假设您选择购买带有限速器的汽车,以确保您不违反限速规定。现在您问:但是我不在乎速度限制。我不应该总是禁用速度限制器吗?您可以,但是如果您被警察抓到了,不要感到惊讶。

    09-13 06:02