当使用 Hibernate 和 Ehcache 作为二级缓存 (2LC) 实现时,是否(或可以)在使用 WHERE 子句执行 COUNT 操作时使用此缓存?
在 SQL 术语中,我正在执行的查询是 SELECT COUNT(id) FROM table WHERE someColumn > 100
。在某些情况下,每次传递的值都不同,有时它总是相同的。
我假设这超出了 2LC 的范围,而是需要“手动”管理(缓存查询结果,并在底层数据发生变化时使缓存失效)。
最佳答案
你是对的,这超出了 L2 缓存提供的范围。然而query cache会成功的。
基本上,Hibernate 会将命名参数(在您的示例中为 [100]
元组)和查询结果之间的映射缓存在名为 org.hibernate.cache.StandardQueryCache
的缓存中.当对 table
(更准确地说:查询中使用的任何表)进行任何更改时,它也会使缓存无效。每个表的最后修改时间存储在 org.hibernate.cache.UpdateTimestampsCache
缓存中。
另见:
关于hibernate - Hibernate 的二级缓存是否/可以用于 COUNT() 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712066/