为了遵循最佳实践,我对如何以及为什么使用versioning有了很好的理解,但是创建一个version列来防止每个表的版本号都是optimistic locking是否是一个好的实践,它的成本是多少?
发布于 2020-12-26 05:08:36
你的问题没有给出足够的上下文。我假设你指的是Hibernate版本控制。Hibernate使用version列并不是为了防止,而是为了实现乐观锁定。来自hibernate reference
@Entity
public class Flight implements Serializable {
...
@Version
@Column(name="OPTLOCK")
public Integer getVersion() { ... }
} 该列允许表中的每一行都有一个版本。现在,假设您使用两个并发线程(可能是两个单独的web请求)对同一Flight实体( Flight表中的同一行)执行了两次读取。假设两个读取的初始版本都为1。
现在,whover首先持续,将增加检索到的行的版本单元格,因此版本将为2。
因此,一旦发生第二个持久化操作,Hibernate就能够判断出存在lost update,因为第二个持久化操作也会尝试将版本增加到2,但数据库中的版本已经是2(由于第一次提交)
此过程的成本可以忽略不计,因为版本是与实体的所有其他字段一起检索和写入的。
https://stackoverflow.com/questions/65451721
复制相似问题