当使用Hibernate和Ehcache作为二级缓存(2LC)实现时,在使用WHERE子句进行COUNT操作时是否(或可以)使用此缓存?
在SQL术语中,我正在执行的查询是SELECT COUNT(id) FROM table WHERE someColumn > 100
。在某些情况下,每次传递的值会有所不同,有时它总是相同的。
我假设这超出了2LC的范围,而是需要“手动”管理(缓存查询结果,并在基础数据发生变化时使该缓存无效)。
答案 0 :(得分:4)
你是对的,这是L2缓存提供的东西。但是query cache可以解决问题。
基本上,Hibernate将缓存命名参数(在您的示例中为[100]
元组)与名为org.hibernate.cache.StandardQueryCache
的缓存中的查询结果之间的映射。当对table
进行任何更改时(更确切地说:查询中使用的任何表),它也会使缓存无效。每个表的最后修改时间存储在org.hibernate.cache.UpdateTimestampsCache
缓存中。
另见: