2012-08-06 8 views
5

He leído otros temas aquí sobre este tema, pero ninguna de las soluciones funciona para mí.¿Cómo se configura la memoria caché de segundo nivel en Hibernate 4.1.5 SP1?

He intentado poner esto en mi hibernate.cfg.xml:

<property name="hibernate.cache.region.factory_class">org.hibernate.cache.spi.EntityRegion</property> 

siempre consigo este error: no pudo crear una instancia RegionFactory [org.hibernate.cache.spi.EntityRegion]

También probé la mayoría de las sugerencias de los hilos en los sitios web de Hibernate pero no tuve suerte.

Entonces, ¿cómo configuro esto?

Respuesta

11

Bueno, he encontrado la respuesta (de un usuario de Youtube):

To get it working:

1) I use hibernate-release-4.1.0.Final or later versions. So I've added jars from its lib\optional\ehcache directory

2) My hibernate.cfg.xml contains:

<property name="cache.region.factory_cla­ss">org.hibernate.cache.ehcache.Si­ngletonEhCacheRegionFactory</property> 

3) Finally I had to add slf4j-api-1.6.1.jar (I found it in ehcache-2.5.1-distribution.tar­.gz downloaded from ehcache.org in addition) because of ClassNotFoundException.

Además, si no lo ha hecho ya, añadir esto a su hibernate.cfg.xml:

<!-- Enable Hibernate's automatic session context management --> 
<property name="cache.use_second_level_cache">true</property> 

El punto clave aquí fue agregar el jar ehcache del directorio opcional \ en Hibernate4.

2

Añada las siguientes propiedades a las propiedades de hibernación:

<prop key="hibernate.cache.use_second_level_cache">true</prop> 
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> 
<prop key="hibernate.cache.provider_configuration_file_resource_path">hibernate-ehcache.xml</prop> 
<prop key="hibernate.cache.use_query_cache">true</prop> 
<prop key="hibernate.generate_statistics">true</prop> 
<prop key="hibernate.cache.use_structured_entries">true</prop> 

Es necesario 4.1.1 tarro de hibernación-ehcache o no ehcache frasco.

Anote la clase de proveedor de caché que ha cambiado.

1

Espero, puede ser de alguna utilidad para alguien (hibernación 4.x).

El extracto de mi configuración del resorte:

public Properties hibernateProperties() { 
    Properties properties = new Properties(); 
    properties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); 
    properties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); 
    properties.setProperty("hibernate.format_sql", "true"); 
    properties.setProperty("hibernate.generate_statistics", env.getProperty("hibernate.generate_statistics")); 
    // second-level cache: 
    properties.setProperty("hibernate.cache.use_second_level_cache", "true");   
    properties.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.EhCacheRegionFactory"); 
    properties.setProperty("net.sf.ehcache.configurationResourceName", env.getProperty("net.sf.ehcache.configurationResourceName")); 
    return properties; 
} 

Debe tener 'org.hibernate: hibernate-ehcache: HIBERNATE_VERSION' en su ruta de clase.

Ver: Ehcache doc on hibernate configuration

Cuestiones relacionadas