我将我的应用程序配置为使用查询缓存。
休眠配置:
hibernate.cache.region.factory_class=net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
hibernate.cache.use_query_cache=true
EHCache 配置:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false" monitoring="autodetect" dynamicConfig="false">
<defaultCache
maxEntriesLocalHeap="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxEntriesLocalDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap"/>
</defaultCache>
<cache name="query.Dictionary.CountriesList"
maxEntriesLocalHeap="10000"
maxEntriesLocalDisk="1000"
eternal="false"
timeToLiveSeconds="86400">
<persistence strategy="localTempSwap" />
</cache>
</ehcache>
道:
Criteria query = session.createCriteria(DictionaryCountry.class)
.setCacheable(true)
.setCacheRegion("query.Dictionary.CountriesList")
.addOrder(Order.asc("name"));
现在,当我第一次尝试填充国家/地区列表时 - 进行了标准查询(select * from ... where ... )
。但是当我第二次这样做时 - 应用程序不是从缓存中获取,而是通过 id sql 查询执行了很多获取(select * from ... where id = ? )
......
这是正常行为吗?
谢谢