Hibernate второй уровень кеша с Spring - PullRequest
19 голосов
/ 23 января 2009

Я использую Spring + JPA + Hibernate. Я пытаюсь включить кэш второго уровня Hibernate. В моей весне 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 id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">

Решено: Так как я использую LocalEntityManagerFactoryBean, он получает свои настройки от META-INF/persistence.xml. Мои настройки в applicationContext.xml даже не читались.

Ответы [ 3 ]

13 голосов
/ 31 мая 2009

Я не ответил на это, но не очевидно, что плакат нашел ответ сам. Я публикую его ответ:

Решено

Поскольку я использую LocalEntityManagerFactoryBean, он получает свои настройки от META-INF/persistence.xml. Мои настройки в applicationContext.xml даже не читались.

5 голосов
/ 30 ноября 2010

Попробуйте это:

<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/

1 голос
/ 24 августа 2013

Эта ссылка помогла мне использовать кэш второго уровня с Hibernate 4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...