MiddleGen-Hibernate-r5 是早期 Hibernate 2/3 時代常用的代碼生成工具,透過 Ant 腳本讀取資料庫中繼資料,產生 .hbm.xml 映射檔與 Java 實體類。雖已較少用於新專案(現多用 JPA/Hibernate Tools/IDE 外掛),但維護舊系統時仍具參考價值。本文記錄完整環境建置、配置調整、生成流程與常見坑點。
| 元件 | 版本建議 | 環境變數 |
|---|---|---|
| JDK | 1.5+ (建議 1.8) | JAVA_HOME, PATH%JAVA_HOME%\bin |
| Apache Ant | 1.7.1+ | ANT_HOME, PATH%ANT_HOME%\bin |
| MiddleGen-Hibernate-r5 | SourceForge 官方版 | 解壓目錄,如 D:\Middlegen-Hibernate-r5 |
驗證:CMD 執行 ant -version 輸出版本資訊即成功。
lib/ 目錄)mysql-connector-java-5.1.11-bin.jar(依資料庫選擇對應驅動)hibernate3.jardom4j-1.6.1.jarhibernate-tools.jarfreemarker.jarslf4j-api-1.5.2.jar, slf4j-jdk14-1.5.2.jar, slf4j-log4j12-1.5.2.jar來源建議:Hibernate 3.3.1 GA 分發包、HibernateTools 3.2.4 Beta、SLF4J 1.5.2 官網。
build.xml 關鍵屬性<property name="database.driver.file" value="${lib.dir}/mysql-connector-java-5.1.11-bin.jar"/>
<property name="database.driver" value="com.mysql.jdbc.Driver"/>
<property name="database.url" value="jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=UTF-8"/>
<property name="database.userid" value="root"/>
<property name="database.password" value="your_pwd"/>
<property name="database.schema" value=""/>
<property name="database.catalog" value="your_db"/>
<property name="jboss.datasource.mapping" value="mySQL"/>
注意:驅動類別名、URL 格式需與 JAR 版本對應(MySQL 5.1 用 com.mysql.jdbc.Driver,8.0+ 用 com.mysql.cj.jdbc.Driver)。
<property name="build.gen-src.dir" value="${basedir}/build/mysrc"/>
預先建立 build/mysrc 目錄。
執行 ant gui 啟動 Swing 介面,選中資料表後可調整:
| 屬性 | 說明 | 建議值 |
|---|---|---|
| Domain Class Name | POJO 類名 | 駝峰命名,如 UserInfo |
| Key Generator | 主鍵生成策略 | MySQL 用 identity 或 native;Oracle 用 sequence;通用首選 uuid.hex |
| Schema Name | 資料庫 Schema | 依實際環境 |
| Enable proxies | 延遲載入代理 | 勾選 |
| Dynamic Update | 僅更新異動欄位 | 勾選(效能優化) |
| Mutable | 實體可變性 | 勾選(視圖/只讀表取消) |

ant hbm(目標名視 build.xml 定義)。build/mysrc/ 對應套件結構下,檔名 *.hbm.xml。lib/build.xml 中 hbm2java 目標 (約第 212 行)<target name="hbm2java" description="Generate .java from .hbm files.">
<taskdef name="hbm2java"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="lib.class.path"/>
<hbm2java destdir="${build.gen-src.dir}">
<configuration>
<fileset dir="${build.gen-src.dir}">
<include name="**/*.hbm.xml"/>
</fileset>
</configuration>
<hbm2java jdk5="true"/> <!-- 生成 JDK 5 語法 (泛型、註解等) -->
</hbm2java>
</target>
關鍵變更:classname 改為 org.hibernate.tool.ant.HibernateToolTask (Hibernate 3 專用),新增 <configuration> 區塊與 jdk5="true"。
將生成的 *.hbm.xml 開頭:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"https://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
改為:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"https://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
僅將 2.0 → 3.0,消除 Don't use old DTDs 警告。
ant hbm2java
POJO 輸出至 build/mysrc/model/ (依套件結構)。
ClassNotFoundException: org.hibernate.tool.ant.HibernateToolTaskhibernate-tools.jar 已放入 lib/ 並被 lib.class.path 引用。serialVersionUIDdatabase.driver 為 com.mysql.cj.jdbc.Driver,URL 加 useSSL=false&serverTimezone=UTC。templates/pojo.vm;但建議遷移至 Hibernate Tools (Eclipse/IDEA 外掛) 或 MyBatis Generator,模板化支援更完善。MiddleGen-Hibernate-r5 完成了從資料庫到 HBM/POJO 的自動化橋樑,理解其配置邏輯(Ant、Hibernate Task、DTD 版本)有助於維護舊專案。新專案建議採用現代工具鏈,獲得更好的型別安全、模板彈性與持續整合友善度。