Ответ 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 "Кэшируемая аннотация"
Ресурсы
- Ehcache 2.0 поддерживает новый поставщик кэширования Hibernate 3.3
- Настроить Ehcache как кэш второго уровня
- Спящий второй уровень кэша