java - 不同 Hibernate session 中对象的可见性

标签 java hibernate session flush

FlushMode两者皆 Session s 设置为 AUTO .

session A: session 开始

session B: session 开始

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

Session B:Session从数据库读取对象,在此之前自动执行Session#flush()手术。 Session A 新创建的对象对 Session B 也可见吗?

最佳答案

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

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

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

关于java - 不同 Hibernate session 中对象的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13842357/

相关文章:

java - 在 "North"BorderLayout 中左右对齐两个 JLabel

java - Java 代码中的断言

java - hibernate 版本 4 jar,maven 依赖项不在存储库中 - 好吧,它在存储库中,但我的存储库是错误的

java - Hibernate问题无法保存到数据库

java - 如何处理有状态的 OSGi 服务以跨包更新维护 session 状态?

java - Maven 包不包含所有依赖项的 JAR

java - 插入失败后恢复 Hibernate session 状态

java - Android App : Log-in to website, 维护 session - Java

PHP Session 只存储一个值

java - 反射 - 从数据库值确定调用方法和参数