2012-01-03 70 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緩存中。

參見:

相關問題