Como posso desativar o cache de segundo nível de alguns certas entidades em Hibernate sem alterar anotações
-
06-09-2019 - |
Pergunta
Eu estou usando Hibernate cache de segundo nível na minha candidatura, por certo razão de negócios Eu não posso mudar a anotação entidade mais .
No meu projeto, além de mudar o banco de dados do Hibernate, também existem outras SQL nativo que não passam por Hibernate. Portanto, os dados cache de segundo nível Hibernate poderia ser obsoleto após o banco de dados que está sendo atualizado a partir do SQL nativo. É por isso que eu quero para desativar o cache de segundo nível para certas entidades (programaticamente ou outra forma de alterar anotação).
Agradecemos antecipadamente!
Solução
AVISO: Como Jens Schauder observou, é impossível para configurar Ehcache para armazenar 0 elementos na memória, definindo maxElementsInMemory = "0" como ele efetivamente provoca efeito oposto - conjuntos de tamanho ilimitado para o cache. Este comportamento não é mencionado na página do Hibernate Cache mas está documentado no página de configuração de cache .
Eu rapidamente analisou a documentação e não encontraram abordagem alternativa ainda. Eu sou incapaz de eliminar esta resposta por mim mesmo. : - (
Minha sugestão original:
Você pode configurar o provedor de implementação de cache de segundo nível aos tempos TTL curtas e / ou para armazenar 0 entradas de determinado tipo de entidade.
por exemplo. se você estiver usando o Ehcache, você pode configurá-lo em ehcache.xml: *
<cache
name="com.problematic.cache.EntityName"
maxElementsInMemory="0" <<== this should effectively disable caching for EntityName
overflowToDisk="false" <<== Do not overflow any entries to disk
/>
Consulte Hibernate Cache na documentação Ehcache.
Outras dicas
No Terracotta 3.1 e acima, você pode ativar / desativar Hibernate 2º nível caches em uma base por região, tanto na configuração (estaticamente) e no tempo de execução, usando o Terracotta console do desenvolvedor.
Você também pode monitorar em tempo real as estatísticas sobre o cache e Hibernate, para nós individuais em um cluster ou de todo o cluster.
Terracotta é open source. Para mais detalhes, consulte a Terracotta por Hibernate .