不同Hibernate会话中对象的可见性

时间:2012-12-12 14:55:03

标签: java hibernate session flush

两个FlushMode中的

Session设置为AUTO

Session A Session开始

Session B Session开始

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

Session B Session从数据库中读取对象,并在此操作之前自动执行Session#flush()Session B 还可以看到新创建的Session A 对象吗?

1 个答案:

答案 0 :(得分:1)

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

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

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