Use o cache de consulta no cache do Hibernate
O cache de consultas usa o cache L2 para armazenar consultas, de modo que sempre que a mesma consulta precisar ser executada novamente, ela possa ser recuperada do cache. Observe que qualquer objeto recuperado como resultado da consulta é armazenado em cache em suas respectivas regiões. Portanto, marque os objetos como armazenáveis em cache para uso eficiente do cache de consulta.
importante
A consulta e as chaves primárias do conjunto de resultados são armazenadas em uma região de consulta padrão chamada "org.hibernate.cache.StandardQueryCache", que é um nome totalmente qualificado da classe StandardQueryCache do Hibernate. No entanto, isto só é suportado para Hibernate-5.2 e versões anteriores.
Note
Como nem todos os resultados da consulta permanecem os mesmos por um período de tempo, use o cache de consultas com consultas cujos resultados têm menos probabilidade de serem alterados com frequência.
Habilitar cache de consulta no cache do Hibernate
Para ativar o cache de consulta, no cache do Hibernate adicione a seguinte tag à sua configuração em hibernate.cfg.xml.
<hibernate-configuration>
<session-factory>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">com.alachisoft.ncache.NCacheRegionFactory</property>
<property name="ncache.application_id">myapp</property>
<property name="hibernate.cache.use_query_cache">true</property>
</session-factory>
</hibernate-configuration>
Ativar o cache de consulta no cache do Hibernate não armazena em cache cada consulta por padrão. Em vez disso, as consultas que precisam ser armazenadas em cache devem ser definidas como armazenáveis em cache no código. Para definir uma consulta como armazenável em cache, chame o método setCacheable(true)
função da consulta ao criar uma consulta. O código abaixo é um exemplo que mostra uma consulta armazenável em cache no cache do Hibernate:
var session = sessionFactory.openSession();
ArrayList<Products> productList = (ArrayList<Products>) session.createQuery("from Products p", Products.class).setCacheable(true).list();
for (var product : productList) {
System.out.println("Retrieved Product: " + product);
}
session.close();
Veja também
Inicializar cache
Adicionar/atualizar no cache
Cache de primeiro nível do Hibernate
Configurar objetos e regiões que podem ser armazenados em cache
Configurar aplicativo de hibernação