Подтвердить что ты не робот

Как настроить JPA 2.0 с Hibernate 3.5.2 для использования EHCache в качестве кеша уровня 2 и кеша запросов?

Я нашел несколько инструкций, как настроить чистый спящий режим для использования EHCache. Но я не могу найти никаких инструкций, как настроить JPA2.0 EntityManager для использования кеша. Hibernate 3.5.2 является моим провайдером JPA2.0.

изменить// Является ли @Cacheable(true) достаточным для объекта? Или я должен использовать @org.hibernate.annotations.Cache для настройки объекта?

4b9b3361

Ответ 1

Я нашел несколько инструкций, как настроить чистый спящий режим для использования EHCache. Но я не могу найти никаких инструкций, как настроить JPA2.0 EntityManager для использования кеша. Hibernate 3.5.2 является моим провайдером JPA2.0.

То, как вы настроите поставщика кеша L2 с JPA, похоже, похоже на raw Hibernate.

По умолчанию Hibernate 3.5 поставляется с EhCache 1.5 (см. Настроить Ehcache как кэш второго уровня), и если вы хотите использовать official, предоставляемый Hibernate (в hibernate-ehcache, если вы используете Maven), объявите:

<!-- This is the provider for Ehcache provided by Hibernate, using the "old" SPI -->
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>

Если вы хотите использовать EhCache 2.x, вам нужно будет использовать провайдер, предоставляемый EhCache, который поддерживает новый Hibernate 3.3/3.5 SPI с его CacheRegionFactory). Использование:

<!-- The region factory property is the "new" property (for Hibernate 3.3 and above) -->
<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.EhCacheRegionFactory">

например создание, или

<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>

чтобы заставить Hibernate использовать одноэлемент Ehcache CacheManager.

И затем активируйте кеширование L2 и кеширование запросов:

<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>

Это для настройки кэша Hibernate L2.

Достаточно ли @Cacheable (true) для объекта? Или я должен использовать @org.hibernate.annotations.Cache для настройки объекта?

В теории предполагается, что @Cacheable является заменой аннотации Hibernate и ее следует использовать в сочетании с элементом shared-cache-mode:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
  <persistence-unit name="FooPu" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    ...
    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
    <properties>
      ...
    </properties>
  </persistence-unit>
</persistence>

Но, как упоминалось в этом предыдущем вопросе, первоначальные эксперименты не были успешными (это может быть связано с HHH-5303, я не могу сказать, что я не расследовал это много). Поэтому я предлагаю придерживаться проприетарных аннотаций.

Ссылки

  • Справочное руководство по Hibernate EntityManager
  • Спецификация JPA 2.0
    • Раздел 3.7.1 "Элемент режима с общим кэшем"
    • Раздел 11.1.7 "Кэшируемая аннотация"

Ресурсы

Связанный с этим вопрос

Ответ 2

в файле persistence.xml вы можете указать это свойство:

<property name="hibernate.cache.region.factory_class"
       value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory" />

и сделать его активным:

<property name="hibernate.cache.use_second_level_cache" value="true" />