gpt4 book ai didi

java - 当您有多个实体时,JPA @Version 注释如何工作

转载 作者:行者123 更新时间:2023-11-30 10:37:10 24 4
gpt4 key购买 nike

假设我们正在使用隔离级别设置为:read_committed 的数据库我们还使用带有 @Version 注释的 JPA 实体。

我们有两个交易 T 和 K,如下所示:

T ------------------------------------ K
开始
读A
读B
读C
--------------------------------------开始
--------------------------------------更新A
--------------------------------------结束
更新 C
使用状态
对象 A 和 B
结束

此时,在事务 T 中,C 的更新成功(版本检查正常),因此我们正在使用事务 T 上从未真正存在过的状态更新 C数据库。

我的理解有什么问题吗?

编辑:

@弗拉德

考虑这个例子:

T-------------------------------------------- ------K

开始交易
读A
----------------------------------------------开始交易< br/>----------------------------------------------模组A< br/>----------------------------------------------Mod B< br/>----------------------------------------------结束交易< br/>读取 C 版本 = 1
读B

//使用数据da A和B
//更新 C
A,B -> C
//更新成功(检查版本是否正常)

结束交易

使用 OPTIMISTIC_FORCE_INCREMENT 你基本上是在告诉我始终使用此选项设置正确的查找方法?

最佳答案

乐观锁定仅适用于单个表行。在这种特殊情况下,实体 C 可以成功更新,因为第二个事务没有修改它。

如果你想在这里制造冲突,那么你必须使用以下任一种乐观锁请求:

这样,在第二个事务中,每当您更新实体 A 时,您也会触发 C 中的版本增量。

关于java - 当您有多个实体时,JPA @Version 注释如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40225128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com