【问题标题】:Spring Data JPA does not work with transaction isolation "READ_UNCOMMITTED"Spring Data JPA 不适用于事务隔离“READ_UNCOMMITTED”
【发布时间】:2018-05-04 18:03:29
【问题描述】:

有两个线程,每个线程绑定两个事务:

DEBUG o.s.orm.jpa.JpaTransactionManager - Creating new transaction with name [com.workflow.consumer.RecordEventConsumer$MockitoMock$1882263982.handleRecordsAddedEvent]: PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED; ''

Creating new transaction with name [com.workflow.statemachine.action.CreateContentAction.execute]: PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED; ''

两个隔离级别都是READ_UNCOMMITTED。但是当第一个线程使用

在数据库中插入一些东西时
repository.saveAndFlush(contextObject)

仓库在哪里JpaRepository<T, I> repository

还有插入发生的实际日志DEBUG org.hibernate.SQL - insert into task_unit ...etc

第二个线程的事务仍然无法检索到这个对象:

repository.getOne(id);
repository.findOne(id);
entityManager.find(class, id);

不止于此,我已经尝试直接连接到数据库并触发

BEGIN TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * from task_unit

还是没有成功。

我错过了什么吗?

【问题讨论】:

  • Postgres 不允许脏读

标签: spring postgresql hibernate transactions spring-data


【解决方案1】:

如果我没看错你的问题,那么本手册除外:

https://www.postgresql.org/docs/9.6/static/transaction-iso.html

在 PostgreSQL 中,您可以请求四种标准事务中的任何一种 隔离级别,但内部只有三个不同的隔离级别 已实现,即 PostgreSQL 的未提交读取模式的行为类似于 阅读已提交。这是因为它是唯一合理的方法来映射 PostgreSQL 多版本并发的标准隔离级别 控制架构。

强调我的

【讨论】:

猜你喜欢
  • 2016-09-19
  • 2016-09-11
  • 2021-07-30
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2015-05-31
  • 1970-01-01
相关资源
最近更新 更多