2009-12-01 11 views
0
<ehcache> 
    <cache name="query.ContactInfoList" 
     maxElementsInMemory="200" 
     eternal="true" 
     overflowToDisk="false" 
     timeToIdleSeconds="300" 
     timeToLiveSeconds="600" 
    /> 
</ehcache> 

public List getContactInfoList(){ 
    hibernateTemplate.setCacheQueries(true); 
    hibernateTemplate.setQueryCacheRegion("query.ContactInfoList"); 
    List list = hibernateTemplate.find("from AdoContactInfo a where active = 1"); 
    hibernateTemplate.setCacheQueries(false); 
    return list; 
} 

peut-je savoir comment clair/rafraîchir cache pour query.ContactInfoList lorsque vous appelez HibernateTemplate saveupdatehibernatetemplate effacer ehcache?

Répondre

3
hibernateTemplate.getSessionFactory().evictQueries("query.ContactInfoList"); 

effacera cette région de cache. Vous ne pouvez pas actualiser manuellement les données de requête mises en cache; La région du cache sera remplacée (si elle est activée) une fois que la requête sera exécutée à nouveau.

+0

appelez ceci après hiberanteTemplate.saveOrUpdate (contactLIst); hibernateTemplate.flush(); hibernateTempalte.getSessionFactory(). evictQueries ("query.ContactInfoLIst"); ? correct? – cometta

+2

Si vous appelez explicitement 'flush()' pour synchroniser l'état entre des sessions simultanées alors oui, vous devriez l'expulser juste après 'flush()'. Cela ressemble à un scénario plutôt inhabituel, cependant (plus vous auriez à faire face au cache de 1er niveau aussi). Normalement, appeler 'flush()' manuellement devrait être évité; La session sera vidée lors de la validation. Dans ce scénario, vous pouvez expulser les requêtes juste avant cela. – ChssPly76