JPA中的乐观锁是什么?

5

我对JPA还不熟悉,看到了这个注解@Version。 在这个注解的文档中,它说:

“此注解指定实体类的版本字段或属性,用作其乐观锁值。版本用于执行合并操作时确保完整性和进行乐观并发控制。”

什么是乐观锁,它与此注解有什么关系呢? 谢谢。


2
在此链接中查找信息:http://bit.ly/Y9IIO1。 - Marko Topolnik
1
让每个人同时编辑同一件事情。当有人提交他们的更改时,请检查是否有其他更改自他们开始更改以来已经提交。如果是这样,请哭泣。(即回滚他们的更改并强制他们获取新的副本)。通常涉及版本号作为跟踪更改集的一种方式。 - David Lavender
1个回答

5
简而言之,对于一个带有被注释为@Version的字段的实体的每个记录都会被标记上一个版本号,就像在SVN中一样。每当通过提交(和刷新!)事务来更新实体时,会进行检查以确保当前实体的版本与数据库中的条目匹配。如果此检查失败,则会导致OptimisticLockException,因为在当前操作之前有人对该注册表进行了更改。

乐观锁基于以下概念:

“我不需要锁定此条目,没有人会碰它”

而悲观锁实际上会锁定给定条目上的某些操作(如读取或写入),假设:

“当我工作时,有人将尝试更新此实体”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接