【发布时间】:2015-10-08 22:28:14
【问题描述】:
我有一个只从数据库读取数据的休眠查询(休眠 3)。数据库由单独的应用程序更新,查询结果不反映数据库中的更改。
通过一些研究,我认为这可能与 Hibernate L2 缓存有关(我不认为它是 L1 缓存,因为我总是打开一个新会话并在它完成后关闭它)。
Session session = sessionFactoryWrapper.getSession();
List<FlowCount> result = session.createSQLQuery(flowCountSQL).list();
session.close();
我尝试在休眠配置文件中禁用第二层缓存,但它不起作用:
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property>
<propertyname="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
我还在Session session = sessionFactoryWrapper.getSession(); 之后添加了session.setCacheMode(CacheMode.Refresh); 以强制刷新一级缓存,但仍然无法正常工作...
还有其他方法可以获取数据库中的更改吗?我在如何禁用缓存方面做错了吗?谢谢。
更新: 我通过监控数据库查询日志做了另一个实验:
- 第一次运行代码。检查日志。查询出现。
- 等待几分钟。数据已被另一个应用程序更改。我通过 MySql Workbench 验证了它。为了区别于前面的查询,我添加了一个虚拟条件。
- 第二次运行代码。检查日志并显示查询。
两次我都使用相同的查询,但由于数据已更改,结果应该不同,但不知何故不是......
【问题讨论】:
-
我有一个非常相似的问题。您是否找到了忘记在此处发布的解决方案?
-
@AndrewBourgeois 抱歉,我没有找到解决方案,所以我删除了 Hibernate 并使用 C3P0 让项目顺利进行。