Hibernate é uma solução de mapeamento objeto-relacional de código aberto popular para Java. Com o propósito de aumentar o desempenho, o Hibernate também fornece o recurso de cache. O Hibernate fornece dois tipos de cache, Cache de Primeiro Nível e Cache de Segundo Nível.
O cache de primeiro nível é integrado e usado como padrão, mas é limitado em uso, não acessível e é apenas um cache em processo. O Cache de Segundo Nível fornece uma arquitetura conectável, o que significa que um cache de terceiros pode ser usado como o Cache de Segundo Nível para Hibernar.
NCache fornece o provedor Hibernate Second Level Cache que pode ser configurado sem nenhuma alteração no código. Ao fazer isso, você obtém acesso ao rico conjunto de recursos de cache distribuído fornecidos pelo NCache.
Configurando NCache como o Cache de Segundo Nível para Hibernate é bastante fácil. Nenhuma alteração no código real é necessária. Apenas os arquivos de configuração precisam ser editados.
Agora para adicionar NCache como Cache de Segundo Nível para Hibernate, o hibernate.cfg.xml deve ser editado da seguinte forma:
Aqui está um exemplo das alterações feitas no hibernate.cfg.xml arquivo:
<hibernate-configuration>
<session-factory>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">JCacheRegionFactory</property>
...
</session-factory>
</hibernate-configuration>
O Hibernate usa regiões de cache para armazenar objetos. NCache permite a configuração dessas regiões de cache com propriedades diferentes. o NCacheO arquivo Hibernate.xml é usado para esta finalidade. Este arquivo contém todas as configurações e opções para regiões e configurações relacionadas usadas pelo NCache.
Segue uma amostra NCacheArquivo de configuração Hibernate.xml onde as regiões são configuradas:
<configuration>
<application-config application-id="myapp" enable-cache-exception="true" default-region-name="DefaultRegion" key-case-sensitivity="false">
<cache-regions>
<region name="hibernator.BLL.Customer:Customer" cache-name="myPartitionedcache" priority="BelowNormal" expiration-type="Absolute" expiration-period="8"/>
<region name="DefaultRegion" cache-name="myPartitionedcache" priority="default" expiration-type="none" expiration-period="0" />
</cache-regions>
...
</application-config>
</configuration>
NCache é um cache distribuído versátil, eficiente e eficaz para .NET Framework, .NET Coree Java. Ele vem com um amplo conjunto de recursos e funcionalidades. Um desses recursos é a sincronização de banco de dados por meio de Dependência SQL. É aqui que o cache verifica se há alterações no banco de dados e recarrega ou remove os itens considerados desatualizados ou redundantes.
Você tem a opção de configurar NCache como o provedor de Cache de Segundo Nível para Hibernate para usar a funcionalidade de sincronização de banco de dados. Você precisará aplicar as seguintes alterações ao NCachehibernação.xml arquivo:
<configuration>
<application-config application-id="myapp" enable-cache-exception="true" default-region-name="DefaultRegion" key-case-sensitivity="false">
...
<database-dependencies>
<dependency entity-name="hibernator.BLL.Customer" type="oracle" sql-statement="select ContactName from Customer where CustomerID ='?'" cache-key-format="hibernator.BLL.Customer#[pk]" connection-string="Your Connection String"/>
</database-dependencies>
</application-config>
</configuration>
O Hibernate fornece um recurso de cache de consulta. Aqui os resultados das consultas são armazenados em cache no Cache de Segundo Nível. NCache permite armazenar em cache essas consultas usando esse recurso. Este recurso pode ser ativado editando o hibernate.cfg.xml arquivo da seguinte forma:
<hibernate-configuration>
<session-factory>
...
<property name="hibernate.cache.use_query_cache">true</property>
</session-factory>
</hibernate-configuration>
A ativação do cache de consulta não armazena em cache cada consulta por padrão. Em vez disso, as consultas que precisam ser armazenadas em cache devem ser configuradas para serem armazenadas em cache no código. Para definir uma consulta que pode ser armazenada em cache, chame a função setCacheable(true) da consulta ao criar a consulta. O código abaixo é um exemplo mostrando uma consulta que pode ser armazenada em cache:
List customerEnumerator = session.createQuery("from Customer c").setCacheable(true).list();
A seguir estão os principais motivos NCache é uma opção adequada para ser usada como um Cache de Segundo Nível para Hibernate onde o aplicativo está sendo executado em um ambiente multi-servidor.