2012-01-03 71 views
3

当使用Hibernate和Ehcache作为二级缓存(2LC)实现时,在使用WHERE子句进行COUNT操作时是否可以使用此缓存?Hibernate的二级缓存是否可用于COUNT()操作?

在SQL术语中,我正在执行的查询是SELECT COUNT(id) FROM table WHERE someColumn > 100。在某些情况下,每次传递的值都会有所不同,有时它们总是相同的。

我假设这不在2LC的范围之内,而是需要'手动'管理(缓存查询的结果,并在底层数据发生变化时使该缓存失效)。

回答

3

你说得对,这是L2缓存提供的东西。但query cache将做的伎俩。

基本上Hibernate会缓存命名参数(在你的例子中为[100]元组)和一个名为org.hibernate.cache.StandardQueryCache的缓存中的查询结果之间的映射。当任何更改为table(更精确地说:查询中使用的任何表)时,它也会使缓存无效。每张表的最后修改时间存储在org.hibernate.cache.UpdateTimestampsCache缓存中。

参见:

相关问题