在休眠中读脏

时间:2015-03-22 15:15:07

标签: oracle hibernate

脏读:定义说明

  

当事务从已被另一个事务修改但尚未提交的行读取数据时,会发生脏读。

假设定义是正确的,我无法理解任何这种情况。

由于隔离原则,事务A无法看到事务B已修改的行的未提交数据。如果事务B没有提交,那么事务A如何在第一时间看到它?只有当两个操作都在同一事务下执行时才有可能。

有人可以解释一下我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:1)

" Dirty"或未提交的读取(UR)是一种允许非阻塞读取的方法。由于Oracle采用了多版本并发控制,因此在Oracle数据库中无法读取未提交的数据;而不是试图阅读其他交易'数据在事务开始时,每个事务都有自己的数据快照,因为它们存在(提交)。因此,所有读取都基本上是非阻塞的。

在使用基于锁的并发控制的数据库(例如DB2)中,可以进行未提交的读取。使用UR隔离级别的事务会忽略其他事务所放置的锁,因此它可以访问已修改但尚未提交的行。

Hibernate作为数据库之上的抽象层,为具有该功能的数据库提供UR隔离级别支持。