Как я могу отключить кэш второго уровня некоторых объектов в Hibernate без изменения аннотаций - PullRequest
6 голосов
/ 01 июня 2009

Я использую кэш второго уровня Hibernate в своем приложении по определенной деловой причине Я больше не могу изменять аннотацию сущности .

В моем проекте, кроме изменения базы данных с Hibernate, существуют и другие нативные SQL, которые не проходят через Hibernate. Поэтому данные кэша второго уровня Hibernate могут быть устаревшими после обновления базы данных из собственного SQL. Вот почему я хочу, чтобы отключил кэш второго уровня для определенных объектов (программно или иным способом, чем изменение аннотации).

Заранее спасибо!

Ответы [ 2 ]

7 голосов
/ 01 июня 2009

ПРЕДУПРЕЖДЕНИЕ: Как отметил Дженс Шаудер, невозможно настроить Ehcache для хранения 0 элементов в памяти, установив maxElementsInMemory = "0", поскольку это эффективно вызывает противоположный эффект - устанавливает неограниченный размер для кэша. Это поведение не упоминается на странице Hibernate Caching , но задокументировано на странице Конфигурация кэша .

Я быстро просмотрел документацию и пока не нашел альтернативного подхода. Я не могу удалить этот ответ самостоятельно. : - (

Мое оригинальное предложение:

Вы можете настроить поставщика реализации кэша второго уровня на короткое время TTL и / или хранить 0 записей определенного типа сущности.

например. если вы используете Ehcache, вы можете настроить его в 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
/>

См. Кэширование Hibernate в документации Ehcache.

1 голос
/ 11 июня 2009

В Terracotta 3.1 и выше вы можете включать / отключать кэши Hibernate 2-го уровня для каждого региона, как в конфигурации (статически), так и во время выполнения, используя Terracotta Developer Console.

Вы также можете отслеживать в реальном времени статистику о кеше и Hibernate для отдельных узлов в кластере или для всего кластера.

Терракота с открытым исходным кодом. Для получения более подробной информации, проверьте Терракотовая для Hibernate .

...