我正在用Hibernate实现WebService来将数据写入/读入数据库(MySQL)。我遇到的一个大问题是当我通过一个JVM(例如:JUNit测试或直接从DBUI套件)成功插入数据(例如,USER表)时,我在单独的JVM上运行的WebService的Hibernate无法找到这个新数据。它们都指向同一个DB服务器。只有当我销毁了WebService的Hibernate SessionFactory并重新创建它时,WebService的Hibernate层才能读取新插入的数据。相反,相同的JUnit测试或来自DBUI套件的直接查询可以找到插入的数据。
感谢任何帮助。
答案 0 :(得分:0)
此问题今天解决了以下问题:
我将Hibernate配置文件(hibernate.cfg.xml)更改为隔离级别至少为“2”(READ COMMITTED)。这立即解决了上述问题。要进一步了解此隔离级别设置,请参阅以下内容:
我通过为每个Session对象设置CacheMode为IGNORE来确保我没有使用二级缓存:
Session session = getSessionFactory().openSession();
session.setCacheMode(CacheMode.IGNORE);
仅供参考:有些人在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>