【问题标题】:Hibernate running on separate JVM fail to read在单独的 JVM 上运行的 Hibernate 无法读取
【发布时间】:2013-12-31 03:33:43
【问题描述】:

我正在使用 Hibernate 实现 WebService 以将数据写入/读取到数据库 (MySQL)。我遇到的一个大问题是,当我通过一个 JVM(例如:JUNit 测试或直接从 DBUI 套件)成功插入数据(例如 USER 表)时,我在单独的 JVM 上运行的 WebService 的 Hibernate 无法找到这些新数据。它们都指向同一个数据库服务器。只有当我破坏了 WebService 的 Hibernate SessionFactory 并重新创建它时,WebService 的 Hibernate 层才能读取新插入的数据。相比之下,相同的 JUnit 测试或来自 DBUI 套件的直接查询可以找到插入的数据。

感谢任何帮助。

【问题讨论】:

  • 您是否有可能启用了二级缓存,而您的第二个应用程序正在读取陈旧数据?
  • @Sajith,谢谢。但我不认为我启用了二级缓存。此外,在这种情况下,我相信我有两个单独的 SessionFactory 实例正在运行:一个是由 JUNIT JVM 插入数据的;另一个是 WebService 服务器,它在每个方法调用中读取数据。

标签: web-services hibernate junit jvm


【解决方案1】:

今天通过以下方式解决了这个问题:

  1. 我将我们的 Hibernate 配置文件 (hibernate.cfg.xml) 更改为将 隔离级别 至少设为“2”(已提交阅读)。这立即解决了上面的问题。要进一步了解此隔离级别设置,请参阅以下内容:

  2. 我通过将每个 Session 对象的 CacheMode 设置为 IGNORE 来确保我没有使用二级缓存:

    Session session = getSessionFactory().openSession();
    session.setCacheMode(CacheMode.IGNORE);
    
  3. 仅供参考:有些人在 hibernate.cfg.xml 中执行了以下操作以禁用其应用程序中的二级缓存(但我不需要):

    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
    <property name="hibernate.cache.use_second_level_cache">false</property>
    <property name="hibernate.cache.use_query_cache">false</property>
    

【讨论】:

    猜你喜欢
    • 2014-09-12
    • 2011-02-22
    • 2020-07-16
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多