Спящий кэш второго уровня с Spring
Я использую Spring + JPA + Hibernate. Я пытаюсь включить кеш второго уровня Hibernate. В моем Spring applicationContext.xml
у меня есть:
<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml</prop>
Когда я запускаю, я получаю ошибку:
Caused by: org.hibernate.HibernateException: Could not instantiate cache implementation
at org.hibernate.cache.CacheFactory.createCache(CacheFactory.java:64)
Caused by: org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hibernate.cache.use_second_level_cache | hibernate.cache.use_query_cache]
at org.hibernate.cache.NoCacheProvider.buildCache(NoCacheProvider.java:21)
Поэтому он жалуется, что у меня нет кеша второго уровня. Я пытаюсь включить его, добавив в свой applicationContext.xml
:
<prop key="hibernate.cache.use_second_level_cache">true</prop>
Но до сих пор нет радости. Я также попытался добавить это в свой ehcache.xml:
<property name="hibernate.cache.use_second_level_cache">true</property>
Но это все еще не работает. Изменение provider_class
на org.hibernate.cache.EhCacheProvider
тоже не помогает:
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
Мои классы объектов аннотируются для использования кеширования
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
Итак, как включить кеш второго уровня?
Изменить: Это находится под символом bean:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
Решено: Поскольку я использую LocalEntityManagerFactoryBean
, он получает свои настройки от META-INF/persistence.xml
. Мои настройки в applicationContext.xml
даже не читались.
Ответы
Ответ 1
Я не ответил на это, но не очевидно, что плакат сам нашел ответ. Я отправляю ответ:
Решенный
Поскольку я использую LocalEntityManagerFactoryBean
, он получает свои настройки от META-INF/persistence.xml
. Мои настройки в applicationContext.xml
даже не читались.
Ответ 2
Попробуйте следующее:
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.max_fetch_depth">4</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</prop>
И если вы используете Maven, добавьте это в свой файл POM:
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.3.0</version>
</dependency>
Или загрузите последнюю банку из http://ehcache.org/
Ответ 3
Эта ссылка помогла мне использовать кеш второго уровня с Hibernate 4