Hibernate Кэш второго уровня << net.sf.ehcache.hibernate.EhCacheProvider >> - PullRequest
4 голосов
/ 01 августа 2009

Я хочу использовать кэш второго уровня в моем проекте hibernate, но я просто немного знаю о кеше второго уровня hibernate, может ли кто-нибудь объяснить, как я должен использовать это в своем коде и какие файлы конфигурации и .jar мне нужны? Я установил эти настройки для моего файла hibernate.cfg.xml

 <property name="hibernate.cache.use_query_cache">true</property>
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>

и добавьте файл jar ehcache-1.6.1.jar, ehcache-1.6.1-javadoc.jar, ehcache-1.6.1-sources.jar Я хочу знать, я могу изменить любую другую конфигурацию?

и как я могу понять, что мой проект использует кэш второго уровня?

если просто установить этот параметр, hibernate автоматически использует это, или я должен использовать ant другой код в моем классе .java (как любая аннотация или что-то еще)

Ответы [ 2 ]

5 голосов
/ 02 августа 2009

Нужная аннотация: org.hibernate.annotations.Cache . Основное использование:

@Entity
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public MyEntity {
    ...

  @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
  public List<ElementType> getSomeCollection() {
    ...
  }
}

Для запросов необходимо включить кэш запросов , установив для свойства hibernate.cache.use_query_cache значение true И указать, что запрос кэшируется в его объявлении (для именованных запросов) или путем вызова setCacheable(true) в экземпляре запроса.

Все это говорит о том, что вы должны быть очень осторожны с кэшированием и ДЕЙСТВИТЕЛЬНО ПОНИМАТЬ , что вы делаете, иначе это принесет больше вреда, чем помощи. Не смотрите на это как на «быстрое исправление» - кеширование всего, например, является определенно неправильным действием.

4 голосов
/ 01 августа 2009

Ваши настройки сделают кэши второго уровня и запросов доступными для использования в вашем проекте, но вам все равно необходимо включить его для определенных объектов, коллекций и запросов. Это требует тщательного планирования, потому что есть компромиссы, которые вам нужно понять. В целом, кэш второго уровня и запросов подходят для данных только для чтения или в основном для чтения, но не для изменчивых данных. Если у вас его еще нет, я бы порекомендовал взять копию Java Persistence с Hibernate . У него очень хорошее отношение к предмету.

...