java - dependency - Hibernate caché de segundo nivel con Spring
spring hibernate (3)
Prueba esto:
<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>
Y si está usando Maven, agregue esto a su archivo POM:
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.3.0</version>
</dependency>
O descargue el último jar desde http://ehcache.org/
Estoy usando Spring + JPA + Hibernate. Estoy intentando habilitar el caché de segundo nivel de Hibernate. En applicationContext.xml
mi Spring tengo:
<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml</prop>
Cuando corro obtengo el error:
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)
Entonces me quejo porque no tengo habilitado el caché de segundo nivel. Intento habilitarlo agregando a mi applicationContext.xml
:
<prop key="hibernate.cache.use_second_level_cache">true</prop>
Pero aún no hay alegría. También intenté agregar esto a mi ehcache.xml:
<property name="hibernate.cache.use_second_level_cache">true</property>
Pero todavía no funciona. Cambiar el provider_class
a org.hibernate.cache.EhCacheProvider
tampoco ayuda:
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
Mis clases de entidad están anotadas para usar el almacenamiento en caché
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
Entonces, ¿cómo habilito el caché de segundo nivel?
Editar: Esto está debajo del bean:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
Resuelto: Como uso LocalEntityManagerFactoryBean
, obtiene su configuración de META-INF/persistence.xml
. Mi configuración en applicationContext.xml
ni siquiera se estaba leyendo.
Este enlace me ayudó a usar el caché de segundo nivel con Hibernate 4
No respondí esto, pero no es obvio que el afiche haya encontrado la respuesta él mismo. Estoy volviendo a publicar su respuesta:
Resuelto
Como uso LocalEntityManagerFactoryBean
, obtiene su configuración de META-INF/persistence.xml
. Mi configuración en applicationContext.xml
ni siquiera se estaba leyendo.