首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

解決 Hibernate RegionFactory 實例化失敗異常

     編輯:Java 綜合教學

異常堆疊

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,類別名稱也有誤。

解決方案

方案一:修正為正確的 EhCache 提供者(Hibernate 3.x)

<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

需確認類別路徑包含 hibernate-ehcache.jar 與 ehcache.jar。

方案二:升級至 Hibernate 4/5 現代配置(推薦)

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.xorg.hibernate.cache.EhCacheProviderhibernate-ehcache, ehcache-core
4.0 - 4.2org.hibernate.cache.ehcache.EhCacheRegionFactoryhibernate-ehcache, ehcache-core
4.3 - 5.2org.hibernate.cache.ehcache.EhCacheRegionFactoryhibernate-ehcache, ehcache 2.10+
5.3+org.hibernate.cache.jcache.JCacheRegionFactoryhibernate-jcache, ehcache 3.x (JSR-107)

Maven 依賴範例

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

驗證步驟

  1. 修正配置後重新啟動應用,確認無 RegionFactory 異常。
  2. 查看啟動日誌:HHH000238: Second level cache enabled 表示二級快取啟動成功。
  3. 若使用 EhCache,確認 ehcache.xml 配置正確且在類別路徑下。

常見延伸問題

Q: 為何不建議繼續用 Hibernate 3.x?
A: 已停止維護,無安全性更新,現代 Spring Boot 2/3 僅支援 Hibernate 5/6。
Q: RegionFactory 與 CacheProvider 差異?
A: CacheProvider 是 3.x 舊介面,RegionFactory 是 4.x+ 新架構,支援多區域、JSR-107 標準。
Q: 實體類需加什麼註解啟用快取?
A: @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)(Hibernate 註解)或 @org.hibernate.annotations.Cache。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved