【问题标题】:Dirty Reading in hibernate休眠中的脏读
【发布时间】:2015-03-22 15:15:06
【问题描述】:

脏读:定义指出

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

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

由于Isolation的原理,事务A看不到被事务B修改过的行的未提交数据。如果事务B根本没有提交,那么事务A怎么能看到呢?只有在同一事务下执行两个操作时才有可能。

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

【问题讨论】:

标签: oracle hibernate


【解决方案1】:

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

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

Hibernate 作为数据库之上的一个抽象层,为具备此能力的数据库提供 UR 隔离级别支持。

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2015-01-17
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多