我对JPA还不熟悉,看到了这个注解@Version
。
在这个注解的文档中,它说:
“此注解指定实体类的版本字段或属性,用作其乐观锁值。版本用于执行合并操作时确保完整性和进行乐观并发控制。”
什么是乐观锁,它与此注解有什么关系呢? 谢谢。
我对JPA还不熟悉,看到了这个注解@Version
。
在这个注解的文档中,它说:
“此注解指定实体类的版本字段或属性,用作其乐观锁值。版本用于执行合并操作时确保完整性和进行乐观并发控制。”
什么是乐观锁,它与此注解有什么关系呢? 谢谢。
@Version
的字段的实体的每个记录都会被标记上一个版本号,就像在SVN中一样。每当通过提交(和刷新!)事务来更新实体时,会进行检查以确保当前实体的版本与数据库中的条目匹配。如果此检查失败,则会导致OptimisticLockException
,因为在当前操作之前有人对该注册表进行了更改。
乐观锁基于以下概念:
“我不需要锁定此条目,没有人会碰它”
而悲观锁实际上会锁定给定条目上的某些操作(如读取或写入),假设:
“当我工作时,有人将尝试更新此实体”