2012-08-06 1 views
5

J'ai lu d'autres discussions sur ce sujet mais aucune de ces solutions ne fonctionne pour moi.Comment configurer le cache de second niveau dans Hibernate 4.1.5 SP1?

J'ai essayé de mettre dans mon hibernate.cfg.xml:

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

Je reçois toujours cette erreur: ne pouvait pas instancier RegionFactory [org.hibernate.cache.spi.EntityRegion]

J'ai également essayé la plupart des suggestions de discussions sur les sites Web Hibernate mais pas de chance.

Alors, comment configurer cela?

Répondre

11

Eh bien, je l'ai trouvé la réponse (d'un utilisateur 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.

Aussi, si vous avez pas fait déjà, ajoutez à votre hibernate.cfg.xml:

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

Le point clé ici était d'ajouter le fichier ehcache jar à partir du répertoire optionnel \ dans Hibernate4.

2

Ajoutez les propriétés suivantes aux propriétés Hibernate:

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

Vous devez hibernate-ehcache 4.1.1 pot ou non jar ehcache.

Veuillez noter la classe du fournisseur de cache qui a changé.

1

Espérons que cela puisse être utile à quelqu'un (hiberner 4.x).

L'extrait de ma configuration de printemps:

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; 
} 

Vous devez avoir 'org.hibernate: mise en veille prolongée-ehcache: HIBERNATE_VERSION' sur votre chemin de classe.

Voir: Ehcache doc on hibernate configuration

Questions connexes