禁用特定查询的hibernate缓存

时间:2014-02-12 23:51:36

标签: java hibernate

我正在使用hibernate(3.6.0)进行标准实体映射以及一些直接的“统计”SQL查询。

这些直接查询中的一些碰巧具有相同的数据“形状”,但是相同的字段根据其源表和参数表示非常不同的信息。

对于这些我使用相同的bean使用SQLQuery.addEntity

我正在为@Id使用'row id',因为真正的标识符是一个相当复杂的复合键。

现在,由于两个不同的查询映射到同一个bean,hibernate认为缓存第一个查询的结果很聪明,并将这些结果返回给第二个完全不同的查询。

我尝试过以下操作:

  1. session.setCacheMode(CacheMode.IGNORE);在会议的最早阶段
  2. 构建查询时
  3. qry.setCacheable(false);
  4. 构建查询时
  5. qry.setCacheMode(CacheMode.IGNORE);
  6. @Cacheable(value = false)作为实体对象的注释
  7. 我发现唯一有效的方法是使实体的@Id成为定义查询源表和参数的字符串连接。这显然不太理想。

    我的问题是,如果hibernate似乎有很多不同的方式告诉引擎忽略缓存,为什么它们都不起作用?

    并且是否有更好的方法告诉hibernate为所选查询禁用缓存,同时将其保留为其他所有内容?

0 个答案:

没有答案