首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止乐观锁的版本控制

防止乐观锁的版本控制
EN

Stack Overflow用户
提问于 2020-12-26 04:55:03
回答 1查看 33关注 0票数 0

为了遵循最佳实践,我对如何以及为什么使用versioning有了很好的理解,但是创建一个version列来防止每个表的版本号都是optimistic locking是否是一个好的实践,它的成本是多少?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-26 05:08:36

你的问题没有给出足够的上下文。我假设你指的是Hibernate版本控制。Hibernate使用version列并不是为了防止,而是为了实现乐观锁定。来自hibernate reference

代码语言:javascript
复制
@Entity
public class Flight implements Serializable {
...
    @Version
    @Column(name="OPTLOCK")
    public Integer getVersion() { ... }
}   

该列允许表中的每一行都有一个版本。现在,假设您使用两个并发线程(可能是两个单独的web请求)对同一Flight实体( Flight表中的同一行)执行了两次读取。假设两个读取的初始版本都为1。

现在,whover首先持续,将增加检索到的行的版本单元格,因此版本将为2。

因此,一旦发生第二个持久化操作,Hibernate就能够判断出存在lost update,因为第二个持久化操作也会尝试将版本增加到2,但数据库中的版本已经是2(由于第一次提交)

此过程的成本可以忽略不计,因为版本是与实体的所有其他字段一起检索和写入的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65451721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档