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

Hibernate NoSuchMethodError: InjectionMetadata.needsRefresh 版本衝突解決

     編輯:程式設計綜合問答

錯誤訊息

java.lang.NoSuchMethodError: 
org.springframework.beans.factory.annotation.InjectionMetadata.needsRefresh
(Lorg/springframework/beans/factory/annotation/InjectionMetadata;Ljava/lang/Class;)Z

原因分析

Spring 核心包與 Hibernate / Spring-ORM 版本不匹配。常見情況:

  • 專案引入 spring-context 5.x 但 spring-orm 4.x(或相反)。
  • Hibernate 版本過舊不支援新版 Spring 的 InjectionMetadata 簽名變更。
  • 傳遞性依賴導致多版本共存(如 spring-beans 有兩個版本)。

解決步驟

  1. 統一 Spring 版本:在 Maven <dependencyManagement> 鎖定版本,例如全部用 5.3.30。
  2. 檢查依賴樹:
    mvn dependency:tree | grep spring
    
    排除衝突的傳遞依賴。
  3. 推薦版本組合 (Spring 5.x):
    <properties>
        <spring.version>5.3.30</spring.version>
        <hibernate.version>5.6.15.Final</hibernate.version>
    </properties>
    
  4. 若必須用舊版 Hibernate 3.x:降級 Spring 至 3.x/4.x 分支,或升級 Hibernate 至 5.x。

快速驗證

清理專案 mvn clean,重新編譯部署,啟動觀察不再拋出 NoSuchMethodError。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved