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

Struts2 整合 Hibernate 懶加載報錯:Javassist 版本衝突

     編輯:程式設計綜合問答

錯誤堆疊關鍵行

java.lang.ClassCastException: com.enity.www.User_$$_javassist_2 cannot be cast to javassist.util.proxy.Proxy
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxy(...)

根本原因

專案類路徑下存在多個版本的 javassist.jar(如 javassist-3.12.1.GA.jar 與 javassist-3.18.1-GA.jar),Hibernate 與 Struts2/其他庫依賴不同版本,導致代理類生成與預期介面不匹配。

解決方案

  1. 排查依賴:mvn dependency:tree | grep javassist 或 IDE 依賴分析,找出重複 jar。
  2. 排除傳遞依賴 (Maven):
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
  3. 統一版本:在 <dependencyManagement> 指定單一版本(建議 3.27.0-GA 或更新穩定版)。
  4. 清理部署:刪除 target/、伺服器 lib/、.m2/repository 快取後重建。

為何單獨 Hibernate 正常?

單獨測試時類路徑較簡單,無版本衝突;整合 Struts2 後引入額外依賴鏈,觸發衝突。

補充建議

  • 避免在映射檔強制 lazy="false" 繞過問題,會導致效能下降(全量載入關聯)。
  • 定期執行 mvn dependency:analyze 檢測未使用/衝突依賴。

Jar 衝突是 Java 企業級開發常見痛點,善用依賴管理工具能從根源解決。

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