我有一个只从数据库中读取数据的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缓存但仍然无法正常工作......
有没有其他方法来获取数据库中的更改?我是否在如何禁用缓存方面做错了什么?谢谢.
更新: 我通过监视数据库查询日志做了另一个实验:
两次我都使用相同的查询,但由于数据已经改变,结果应该是不同的,但不知何故,它不是......
如果没有二级缓存和查询缓存,hibernate将始终在新会话中从数据库中获取所有数据。
您可以通过启用包的 DEBUG 日志级别(如果您想查看绑定变量,org.hibernate则启用 TRACE 级别)来检查 Hibernate 到底执行了哪个查询。org.hibernate.type
| 归档时间: |
|
| 查看次数: |
3244 次 |
| 最近记录: |