嵌套事务(而不是并发事务)的默认隔离级别是多少?

时间:2018-11-21 23:10:41

标签: java spring spring-data-jpa spring-transactions jta

Spring具有3种典型的嵌套事务传播:REQUIREDNEWNESTED。隔离级别类型总是根据并发事务来描述。但是嵌套的情况呢?从内部到外部以及从另一方向到另一方向的默认可见性是什么?在这两者上设置隔离级别都会产生什么影响?

是否存在任何经验法则,例如“外部事务总是看到内部的更改而与隔离或传播类型无关”或“内部仅当将外部设置为read_uncommited时才能看到外部的更改。还是按要求设置的等等。

编辑:我不是在谈论实际的SQL查询,而是持久性上下文。我的意思是,如果我创建一个资源并在嵌套事务模型的另一部分中读取它,那么无论该更改是否实际上持久存在,我都可以看到该更改吗?一个很好的例子是一个事务工作流,该工作流执行使用repository.save,repository.find ...等的事务方法。

1 个答案:

答案 0 :(得分:1)

内部事务与外部事务之间没有隔离。它存在的唯一原因是保存点。那件事只是让您回滚内部事务而无需回滚外部事务。 Documentation说:

  

PROPAGATION_NESTED使用一次物理交易,同时进行多次   它可以回滚的保存点。   内部事务范围触发其范围的回滚,其中   能够继续实际交易的外部交易   尽管某些操作已回滚。此设置是   通常映射到JDBC保存点,因此仅适用于JDBC   资源交易。参见Spring的DataSourceTransactionManager

UPD: 您也可以find

  

事务隔离级别。仅适用于传播设置   的REQUIREDREQUIRES_NEW

相关问题