Hibernate查询返回过时数据

5 java caching hibernate

我有一个只从数据库中读取数据的hibernate查询(hibernate 3).数据库由单独的应用程序更新,查询结果不反映数据库中的更改.

通过一些研究,我认为它可能与Hibernate L2缓存有关(我不认为它是L1缓存,因为我总是打开一个新会话并在它完成后关闭它).

Session session = sessionFactoryWrapper.getSession();
List<FlowCount> result = session.createSQLQuery(flowCountSQL).list();
session.close();
Run Code Online (Sandbox Code Playgroud)

我尝试在hibernate配置文件中禁用第二层缓存,但它不起作用:

<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>
Run Code Online (Sandbox Code Playgroud)

我还添加session.setCacheMode(CacheMode.Refresh);Session session = sessionFactoryWrapper.getSession();强制刷新L1缓存但仍然无法正常工作......

有没有其他方法来获取数据库中的更改?我是否在如何禁用缓存方面做错了什么?谢谢.

更新: 我通过监视数据库查询日志做了另一个实验:

  1. 第一次运行代码.检查日志.查询显示出来.
  2. 等几分钟.另一个应用程序更改了数据.我通过My​​Sql Workbench验证了它.为了与先前的查询区分,我添加了一个虚拟条件.
  3. 第二次运行代码.检查日志并显示查询.

两次我都使用相同的查询,但由于数据已经改变,结果应该是不同的,但不知何故,它不是......

Dra*_*vic 0

如果没有二级缓存和查询缓存,hibernate将始终在新会话中从数据库中获取所有数据。

您可以通过启用包的 DEBUG 日志级别(如果您想查看绑定变量,org.hibernate则启用 TRACE 级别)来检查 Hibernate 到底执行了哪个查询。org.hibernate.type