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

SSH 整合報錯 NoSuchFieldError: TRACE —— Hibernate 4 與 JBoss Logging 版本衝突

     編輯:程式設計綜合問答

錯誤堆疊關鍵信息

Caused by: java.lang.NoSuchFieldError: TRACE
    at org.jboss.logging.Log4jLogger.translate(Log4jLogger.java:64)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1311)
    ...
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(...)

根因分析

Hibernate 4 依賴 JBoss Logging API,但運行時類路徑中存在多個版本的 jboss-logging.jar 或 log4j.jar,導致 TRACE 級別常量缺失。 具體常見於:

  • 項目同時引入 hibernate-jpa-2.1-api、jboss-logging、log4j、slf4j-log4j12 等,版本不協調。
  • Spring 的 LocalSessionFactoryBean 初始化時,Hibernate 內部調用 JBoss Logging 的 Logger.trace(),但加載的 Log4jLogger 類找不到 TRACE 字段。

解決方案

  1. 統一日誌門面為 SLF4J + Logback(推薦):
    • 排除所有 log4j、commons-logging、jboss-logging 传递依赖。
    • 引入 logback-classic、slf4j-api、jcl-over-slf4j、log4j-over-slf4j。
  2. 若必須用 Log4j 1.x:強制統一 jboss-logging 版本為 3.1.x(Hibernate 4.x 兼容),並確保 log4j:log4j:1.2.17 單一版本。
    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>3.1.4.GA</version>
    </dependency>
  3. 檢查 spring-hibernate.xml:確認 LocalSessionFactoryBean 配置正確,數據源、包掃描、方言無誤。

Maven 依賴排查命令

mvn dependency:tree -Dverbose | grep -E "jboss-logging|log4j|slf4j"
# 看是否有多版本共存,用  排除傳遞依賴

總結

NoSuchFieldError: TRACE 典型為 **JBoss Logging 與 Log4j 版本衝突**。徹底清理傳遞依賴,統一為 SLF4J+Logback 或鎖定兼容版本,即可解決。Spring 整合 Hibernate 4 時,日誌依賴管理是必修課。

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