我知道,可以使用以下代码来实现乐观锁定,但缺点是用户或应用程序必须刷新并重试失败的更新。如何解决这个问题,使用户或应用程序不会陷入此类失败错误?
public class User {
@Id
private Long id;
@Version
private Long version;
}
最佳答案
您可以use使用版本的乐观锁定或使用数据库锁定的悲观锁定。
乐观意味着您希望并发更改永远不会发生,如果发生的话,其中一个用户将获胜,而第二个(或第三个等)则必须从数据库更新其实体并再次执行更改。由于它在数据库层不使用任何额外的锁定,因此它只是为您的系统/数据库提供了巨大的吞吐量。
另一方面,您可以使用悲观锁定,一旦用户开始编辑实体,就会锁定实体。当底层事务提交/回滚时,锁会同时释放。没有人可以从数据库中获取实体,因此大多数用户需要等待另一个用户提交事务。明显的优点是不再出现此类错误,缺点是吞吐量较低。
关于java - 如何解决hibernate中乐观锁(Versioning)的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18396261/