org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' ... Caused by: org.hibernate.HibernateException: could not instantiate RegionFactory [org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge]
Hibernate 3.x 時代的配置屬性 hibernate.cache.provider_class 指定了不存在或不相容的快取提供者類別。常見錯誤配置:
<property name="hibernate.cache.provider_class">org.hibernate.catche.NoCacheProvide</property>
拼寫錯誤:catche 應為 cache,類別名稱也有誤。
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
需確認類別路徑包含 hibernate-ehcache.jar 與 ehcache.jar。
Hibernate 4+ 棄用 provider_class,改用 hibernate.cache.region.factory_class:
<!-- Hibernate 4/5 + EhCache 2.x --> <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> <!-- Hibernate 5.3+ + EhCache 3.x (JSR-107 標準) --> <property name="hibernate.cache.region.factory_class">org.hibernate.cache.jcache.JCacheRegionFactory</property> <property name="hibernate.javax.cache.provider">org.ehcache.jsr107.EhcacheCachingProvider</property>
<property name="hibernate.cache.use_second_level_cache">false</property> <property name="hibernate.cache.use_query_cache">false</property>
| Hibernate 版本 | RegionFactory 類別 | 所需依賴 |
|---|---|---|
| 3.x | org.hibernate.cache.EhCacheProvider | hibernate-ehcache, ehcache-core |
| 4.0 - 4.2 | org.hibernate.cache.ehcache.EhCacheRegionFactory | hibernate-ehcache, ehcache-core |
| 4.3 - 5.2 | org.hibernate.cache.ehcache.EhCacheRegionFactory | hibernate-ehcache, ehcache 2.10+ |
| 5.3+ | org.hibernate.cache.jcache.JCacheRegionFactory | hibernate-jcache, ehcache 3.x (JSR-107) |
<!-- Hibernate 5.6 + EhCache 3 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.15.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jcache</artifactId>
<version>5.6.15.Final</version>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.9.9</version>
</dependency>
RegionFactory 異常。HHH000238: Second level cache enabled 表示二級快取啟動成功。ehcache.xml 配置正確且在類別路徑下。CacheProvider 是 3.x 舊介面,RegionFactory 是 4.x+ 新架構,支援多區域、JSR-107 標準。@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)(Hibernate 註解)或 @org.hibernate.annotations.Cache。