Я нашел несколько инструкций, как настроить чистый Hibernate для использования EHCache.Но я не могу найти какие-либо инструкции, как настроить JPA2.0 EntityManager для использования кэша.Hibernate 3.5.2 - мой провайдер JPA2.0.
Способ настройки провайдера кэширования L2 с использованием JPA аналогичен исходному Hibernate.
По умолчанию Hibernate 3.5 поставляется с EhCache 1.5 (см. Настройка Ehcache в качестве кэша второго уровня ), и если вы хотите использовать официальный поставщик кэша, предоставляемый 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 «Кэшируемая аннотация»
Ресурсы
Смежный вопрос