FlushMode
中的
Session
A :Session
开始
Session
B :Session
开始
Session
A :Session
创建新对象,Session#flush()
被调用,Session
结束。
Session
B :Session
从数据库中读取对象,并在此操作之前自动执行Session#flush()
。 Session
B 还可以看到新创建的Session
A 对象吗?
答案 0 :(得分:1)
这取决于您的隔离级别和底层数据库。 Hibernate默认隔离级别为底层数据库。 MySQL的默认值是REPEATABLE_READ。这意味着如果A在B首次读取之前进行A提交,会话B将看到更新(无论这是否是对已更新实体的读取,尽管我认为这是MySQL特定的行为。某些数据库可能允许读取不相关的实体)。
如果隔离级别为READ_COMITTED,则只要会话A在会话B执行您感兴趣的读取之前提交会话A,会话B就会看到会话A的更新。
值得指出的是,除非你完全没有隔离,否则冲洗对这个问题绝对没有影响。唯一重要的是提交。