0

FlushMode在两个Sessions 中都设置为AUTO

Session Session开始

Session BSession开始

Session A :Session创建新对象,Session#flush()被调用,Session结束。

Session BSession从数据库中读取对象并Session#flush()在此操作之前自动执行。A新创建的对象对Session B也可见吗?Session

4

1 回答 1

1

这取决于您的隔离级别和底层数据库。Hibernate 将隔离级别默认为底层数据库。MySQL 的默认值为 REPEATABLE_READ。这意味着如果 A 在 B 首次读取之前提交,会话 B 将看到更新(不管这是否是对相关更新实体的读取,尽管我相信这是 MySQL 特定的行为。某些数据库可能允许读取不相关的实体)。

如果隔离级别为 READ_COMITTED,则会话 B 将看到来自会话 A 的更新,只要会话 A 在会话 B 执行您感兴趣的读取之前提交。

值得指出的是,除非您完全没有隔离,否则刷新对这个问题绝对没有影响。唯一重要的是提交。

于 2012-12-12T16:55:06.060 回答