我正在使用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为所选查询禁用缓存,同时将其保留为其他所有内容?