Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为特定查询禁用hibernate缓存_Java_Hibernate - Fatal编程技术网

Java 为特定查询禁用hibernate缓存

Java 为特定查询禁用hibernate缓存,java,hibernate,Java,Hibernate,我使用hibernate(3.6.0)进行标准实体映射以及一些直接的“统计”sql查询 其中一些直接查询碰巧具有相同的数据“形状”,即相同的字段,但根据它们的源表和参数表示非常不同的信息 对于这些,我使用同一个bean使用SQLQuery.addEntity 我对@id使用了一个“row id”,因为真正的标识符是一个相当复杂的复合键 现在,由于两个不同的查询映射到同一个bean,hibernate认为缓存第一个查询的结果并为第二个完全不同的查询返回这些结果是明智的 我已尝试做以下工作: ses

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

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

对于这些,我使用同一个bean使用
SQLQuery.addEntity

我对
@id
使用了一个“row id”,因为真正的标识符是一个相当复杂的复合键

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

我已尝试做以下工作:

  • session.setCacheMode(CacheMode.IGNORE)在会话中最早的时间点
  • qry.setCacheable(false)构造查询时
  • qry.setCacheMode(CacheMode.IGNORE)构造查询时
  • @Cacheable(value=false)
    作为实体对象上的注释
  • 我发现唯一有效的方法是使实体的
    @Id
    成为定义查询源表和参数的字符串串联。这显然不理想

    我的问题是,如果hibernate似乎有这么多不同的方法告诉引擎忽略缓存,为什么它们都不工作


    还有没有更好的方法告诉hibernate禁用所选查询的缓存,同时让其他所有查询都像往常一样?

    亲爱的@pstanton我也有同样的问题,如果发现任何问题,请编写解决方案……我通过连接使行唯一的列,在查询中创建一列,并将该列映射到@Id字段。