Pessoal, estou tentando cachear as seguintes entidades utilizando o 2nd level cache do hibernate (ehcache) : Estado e Cidade. Elas são read-only e só preciso traze-las do banco 1x. Elas são carregadas via Query (jpa), portanto preciso usar o query cache, porém não estou conseguindo fazer esse bendito cache funcionar. Já tentei os seguintes cenários de configuração:
A) Criar 1 cache para estas queries no arquivo ehcache.xml e setar os hints necessáros no objeto query (org.hibernate.cacheable e org.hibernate.cacheRegion) :
<cache name="eternalQueryCache"
maxElementsInMemory="1000"
eternal="true"/>
Não funcionou e toda hora que carrego a página, a consulta é realizada. Na primeira vez que a consulta é realizada, a seguinte linha foi impressa no console:
INFO: starting query cache at region: eternalQueryCache
B) Em complemento ao item anterior, foi adicionada a anotação @Cache(usage = CacheConcurrencyStrategy.READ_ONLY) nestas entities. O cache mostrou algum sinal de vida heheh, porém, não o cache de queries, mas sim o cache default (copiei do ehcache-failsafe.xml existente no jar do ehcache). A consulta é executada a primeira vez, e ao ser chamada novamente, os objetos são trazidos do cache e não há chamada ao banco (o sql não é impresso no console). Porém após os 60 segundos configurados no cache default, a consulta é executada novamente.
<defaultCache maxElementsInMemory="1000"
eternal="true"
timeToIdleSeconds="60"
timeToLiveSeconds="60"
overflowToDisk="false"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU" />
Bem, gostaria da opnião de vcs a respeito dessa solução para este tipo de caso, e se seria o mais eficaz? Acredito que devo substituir a Query por uma named query também… Bem obrigado por qualquer possível ajuda. []'s.