Hibernate 發布包含 20+ JAR 文件,初學者易混淆。本文基於 Hibernate 3.x/4.x/5.x 經典依賴結構,深度解析每個包的作用、依賴關係、必選與可選分類、版本衝突排查與現代 Maven/Gradle 依賴管理最佳實踐。
核心必選包 (項目運行不可或缺)
| JAR 包 | 版本示例 | 核心作用 | 來源 |
| hibernate-core | 5.6.15.Final | Hibernate 核心實現:SessionFactory、Session、Transaction、Query、Criteria、映射解析、緩存、攔截器 | org.hibernate |
| hibernate-commons-annotations | 5.1.2.Final | 註解掃描、元數據處理、JPA 註解支援 | org.hibernate |
| hibernate-jpa-3.0-api / jakarta.persistence-api | 3.1.0 / 3.1.0 | JPA 規範 API (EntityManager、Annotations、JPQL),Hibernate 實現 JPA 介面 | org.hibernate / jakarta.persistence |
| antlr | 2.7.7 / 3.5.2 | HQL/JPQL 解析器生成器,將查詢語言編譯為 AST | antlr |
| dom4j | 2.1.3 / 1.6.1 | XML 解析 (hbm.xml、cfg.xml),XPath 支援,Hibernate 3.x 核心依賴,4.x+ 可選 | dom4j / org.dom4j |
| jandex | 2.4.2.Final | 註解索引器,啟動期快速掃描實體註解,提升啟動速度 | org.jboss |
| classmate | 1.5.1 | 類型解析輔助,泛型擦除後類型信息保留 | com.fasterxml |
| jboss-logging | 3.4.3.Final | 日誌抽象層,橋接 Log4j2/Logback/JUL/SLF4J | org.jboss.logging |
| jboss-transaction-api_1.2_spec | 1.1.1.Final | JTA 1.2 規範 API (UserTransaction、TransactionManager) | org.jboss.spec.javax.transaction |
字節碼操作與代理 (核心必選)
| JAR 包 | 作用 | 說明 |
| byte-buddy | 現代字節碼操作庫 (Hibernate 5.3+) | 替代 CGLIB/ASM,生成實體代理、延遲加載攔截器、性能優越、API 友好 |
| cglib | 舊版代理生成 (Hibernate 5.3 前) | 繼承式代理,最終類/方法無法代理,已由 Byte Buddy 取代 |
| asm | 底層字節碼操作框架 | Byte Buddy/CGLIB 依賴,直接依賴較少 |
連接池 (四選一,生產必選其一)
| JAR 包 | Maven 坐標 | 特點 | 推薦指數 |
| HikariCP | com.zaxxer:HikariCP:5.0.1 | 極致性能、輕量、預設配置優秀、Spring Boot 2+ 默認 | ⭐⭐⭐⭐⭐ |
| DBCP2 | org.apache.commons:commons-dbcp2:2.9.0 | Tomcat 歷史默認、功能完整、性能次於 HikariCP | ⭐⭐⭐ |
| c3p0 | com.mchange:c3p0:0.9.5.5 | 老牌、配置複雜、維護緩慢、不推薦新項目 | ⭐⭐ |
| Vibur DBCP | org.vibur:vibur-dbcp:21.0.1 | 現代、支援 Statement 緩存、監控豐富 | ⭐⭐⭐⭐ |
原則:EJB 容器環境必須使用容器管理 DataSource (JNDI),不可自行配置連接池,否則事務管理失效。
快取提供者 (二級快取/查詢快取可選其一)
| JAR 包 | 坐標 | 特點 |
| Ehcache 3.x | org.ehcache:ehcache:3.10.8 | JSR-107 (JCache) 標準實現、堆/堆外/磁盤三級、Spring 整合良好 |
| Infinispan | org.infinispan:infinispan-core:14.0.18.Final | 分散式快取、叢集模式、事務支援、WildFly 默認 |
| Caffeine | com.github.ben-manes.caffeine:caffeine:3.1.8 | 單機高性能、W-TinyLFU 算法、非 JCache 標準 (需適配器) |
| Redis (Hibernate 6+) | org.hibernate.orm:hibernate-redis | 分散式二級快取、微服務架構首選 |
資料庫方言與 JDBC 驅動 (按需引入)
- MySQL: `mysql:mysql-connector-j:8.0.33` (8.0+) / `mysql:mysql-connector-java:5.1.49` (5.x)
- PostgreSQL: `org.postgresql:postgresql:42.7.0`
- Oracle: `com.oracle.database.jdbc:ojdbc11:23.4.0.0` (JDK 11+)
- SQL Server: `com.microsoft.sqlserver:mssql-jdbc:12.4.1.jre11`
- H2 (測試): `com.h2database:h2:2.2.224`
工具與測試依賴 (compile/test scope 區分)
| JAR 包 | Scope | 用途 |
| hibernate-entitymanager | compile | JPA EntityManager API 實現 (Hibernate 5.2+ 合併入 core) |
| hibernate-envers | compile | 實體審計/版本控制 (@Audited) |
| hibernate-validator | compile | Bean Validation 2.0 實現 (@NotNull、@Size 等) |
| junit-jupiter | test | 單元測試框架 |
| mockito-core | test | Mock 框架 |
| testcontainers | test | 整合測試真實資料庫 |
依賴衝突排查與最佳實踐
常見衝突場景
- 多版本 SLF4J 綁定:`slf4j-log4j12` + `logback-classic` + `log4j-slf4j-impl` → 保留一個綁定
- JPA API 版本不匹配:`hibernate-jpa-2.1-api` vs `jakarta.persistence-api` → 統一 Jakarta EE 9+ (jakarta.*)
- Byte Buddy / ASM 版本衝突:Spring、Hibernate、Mockito 可能引入不同版本 → 依賴管理統一版本
- Dom4j 1.x vs 2.x:包名變更 (`dom4j` → `org.dom4j`),不可共存
Maven 依賴管理模板
org.hibernate
hibernate-bom
5.6.15.Final
pom
import
com.zaxxer
HikariCP
5.0.1
org.ehcache
ehcache
3.10.8
org.hibernate
hibernate-core
com.zaxxer
HikariCP
org.ehcache
ehcache
com.oracle.database.jdbc
ojdbc11
runtime
Gradle 依賴管理
dependencies {
// Hibernate BOM
implementation platform("org.hibernate:hibernate-bom:5.6.15.Final")
// 核心
implementation "org.hibernate:hibernate-core"
// 連接池
implementation "com.zaxxer:HikariCP"
// 快取 (可選)
implementation "org.ehcache:ehcache"
// 資料庫驅動
runtimeOnly "com.oracle.database.jdbc:ojdbc11"
// 測試
testImplementation "org.junit.jupiter:junit-jupiter"
testImplementation "org.mockito:mockito-core"
testImplementation "org.testcontainers:testcontainers"
}
版本演進關鍵節點
| 版本 | 關鍵變更 |
| 3.x | Dom4j 必選、CGLIB 代理、XML 配置為主 |
| 4.x | JPA 2.0 標準化、多租戶、OSGi 支援、Dom4j 可選 |
| 5.0 | JPA 2.1、Java 8 基線、Bootstrap API 重構 |
| 5.3 | Byte Buddy 替代 CGLIB、模組化 (JPMS) 支援 |
| 5.5/5.6 | JPA 3.0 (Jakarta EE 9)、Jakarta 命名空間遷移 (javax.* → jakarta.*) |
| 6.0 | JPA 3.1、Java 11 基線、Jakarta EE 10、配置屬性統一 `hibernate.*` |
總結
- 核心必選:`hibernate-core` + 連接池 (HikariCP 首選) + 資料庫驅動
- 功能可選:快取 (Ehcache/Infinispan)、審計 (Envers)、驗證 (Validator)、JPA (自動傳遞)
- 版本統一:使用 BOM/Platform 管理傳遞依賴版本,避免鑽石依賴衝突
- Scope 正確:驅動 `runtime`、測試 `test`、編譯期註解處理器 `annotationProcessor`
- 現代化:Hibernate 6+、Jakarta EE 9+、Java 11+、Byte Buddy、HikariCP、JCache 標準快取
理解依賴圖譜,才能構建精簡、穩定、可維護的持久層工程。