java - 隔离级别和不一致状态

标签 java sql jpa transactions

假设我有隔离级别读已提交

  • 我的交易读取为 A

  • 另一笔交易修改了A和B

  • 然后我读了B

  • 我做了一些涉及 A 和 B 的业务逻辑

所以我会发现自己在一个从未存在过的状态中工作..?
您如何应对?

最佳答案

您应该提供更详细的信息,例如步骤 1 和 3 是在相同还是不同的事务中执行。还要提及步骤 4(即“业务逻辑”)是否读取或更新 A 和/或 B。如果没有更多信息,就不可能准确回答您的问题。在高水平上 -

  1. 读取已提交:您会看到已提交的行。在这种情况下,由于 A 在另一个事务修改它之前被读取(假设您的项目符号描述了事件 I 到 IV 的顺序),因此在步骤 II 后您可能没有最新值 A。如果您在单独的事务中读取 B,您可能会在步骤 II 中看到 B 是最新的。

  2. 可重复读:在同一个事务中一致地读取相同的数据。如果一个事务试图修改 A,而另一个事务正在读取它,则根据并发控制机制,重复读取或更新都会失败。

附注要执行原子更新,您可以考虑使用“选择更新”查询。

关于java - 隔离级别和不一致状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40220474/

相关文章:

java - 使用流 API 将 arraylist 添加到 arraylist

c# - 即时修改 SQL 结果?

java - Java框架中不同类和接口(interface)之间关系的可视化

java - 谁控制output.log和error.log文件?

java - 为什么我的 JPanel 占用了 JFrame?

sql - 高效的 Ad-hoc SQL OLAP 结构

sql - 如何从sql表中只返回一个结果?

java - REST Controller 中具有一对多关系的实体的递归 JSON View

java - 继续获取 "java.lang.IllegalArgumentException: No query defined for that name"即使我有一个适当名称的@NamedQuery

hibernate - 如何在Kotlin Spring Boot中生成QClass?