【发布时间】:2019-04-24 14:14:01
【问题描述】:
Spring 有 3 种典型的嵌套事务传播:REQUIRED、NEW 和 NESTED。隔离级别类型总是根据并发事务来描述。但是嵌套案例呢?从内部到外部以及相反的默认可见性是什么?设置隔离级别对两者有何影响?
是否有任何经验法则,例如“外部事务总是看到内部不考虑隔离或传播类型的变化”或“内部只有在其设置为 read_uncommited 时才能看到外部的变化。还是根据需要设置等等..?
编辑:我说的不是实际的 sql 查询,而是持久性上下文。我的意思是,如果我创建一个资源并在嵌套事务模型的另一部分中读取它,无论它是否实际被持久化,我都会看到更改吗?一个很好的例子是一个事务工作流,它执行使用repository.save、repository.find ...等的事务方法
【问题讨论】:
-
但这些都不是隔离级别。而是在某个特定点有/没有交易时该怎么做。我还要说,由于嵌套事务在“父”事务的范围内,因此它们共享共同的范围。从未测试过。
-
我总是想到一个事务方法调用另一个事务方法。所以总是有事务的上下文。我希望即使默认情况下两个事务都已 read_commited,也会有更改可见性的特殊规则,但我在文档中找不到它
-
read committed几乎在所有数据库中都是默认的,但例外情况较少,nested传播类型不是很大,顺便说一句
标签: java spring spring-data-jpa spring-transactions jta