前言:Java 資料持久化的演進軌跡
Java 自 JDBC 1.0(JDK 1.1)納入標準庫,歷經 JDBC 2.0/3.0/4.0 不斷增強(連線池、可更新 ResultSet、RowSet、DataSource 標準化),仍難掩面向對象與關係資料庫的阻抗失配。開發者長期在「手寫 JDBC 包裝 → DAO 模式 → 商用/開源 O/R Mapping → JDO 標準化」的道路上探索。本文梳理 JDO 起源、核心技術、主流產品與 2.0 規劃,為技術選型提供歷史視角。
傳統 O/R Mapping 痛點回顧
- 命名不一致: 類別/屬性 vs 資料表/欄位,維護雙重映射極易出錯。
- 查詢綁定 SQL: 連表、子查詢仍需寫原生 SQL,失去物件導向優勢。
- 資源洩漏: 手動管理 Connection/Statement/ResultSet 關閉,finally 區塊碼冗長。
- 關係處理困境: 一對多、多對多、雙向關聯、延遲載入、循環引用,手寫代碼極其複雜。
- 繼承/多態無支援: 物件模型精華在傳統包裝中完全缺失。
產品化 O/R Mapping 里程碑
| 產品 | 特色 | 命運 |
| TopLink | 早期 C++/Java 雙支援、查詢過濾器強大、效能優異 | 被 Oracle 收購,併入 Oracle AS |
| Castor | 實作 ODMG OQL 規范、Java 反射映射、開源免費 | 停留在 0.9.x,社區轉向 JiBX/ORM |
| Hibernate | HQL 查詢語言、延遲載入、攔截器、輕量級、社區極度活躍 | 成為事實標準,後納入 JPA |
物件查詢語言演進
- ODMG OQL: 標準化物件查詢,支援
select * from User where User.belongTo.name='G1',避免手寫 JOIN。
- EJB QL: 僅用於 CMP Entity Bean 部署描述符,靜態、無動態查詢能力。
- JDOQL: 緊密結合 Java 語法(布林運算式、方法呼叫),規範性強但被批評冗長。
JDO 標準化歷程 (JSR-12)
- 1999/07 JSR-12 立項,專家組含 Sun、IBM、Oracle、BEA、SAP 等。
- 2000/05 公開評論草案,2000/06 JavaOne 首秀。
- 2002/04 JDO 1.0 正式發布,2002/08 1.0.1 修正版。
- 2003/08 JDO 2.0 啟動,引入 JDO/R(關係資料庫子規範)、FetchGroup 增強、Managed Relationship、Detach/Attach 生命週期等重磅特性。
主流 JDO 實作產品對比 (2003 年視角)
| 產品 | 廠商/來源 | 特色 | 授權 |
| Kodo JDO | SolarMetrics (美) | 效能/穩定性優、客戶最多、商業支援完善 | 商業,~$2000/開發座位 |
| LiDO | LibeLis (法) | 支援 RDBMS/ODBMS/XML/檔案、功能大而全 | 商業 |
| JDOGenie | HemSphere (南非) | 圖形化配置工具強、易上手、CTO 積極回應社區 | 商業 |
| JRelay | ObjectIndustries (德) | 早期 GUI 配置、後期更新緩慢 | 商業 |
| TJDO | 社區 (RI 擴展) | 免費、基於 RI、進度緩慢 | 開源 |
| JPOX / Xcalia | 社區/商業 | 後來成為 JDO 2.0 RI 基礎 | 開源/商業雙軌 |
Oracle 的雙重身分與態度轉變
身為專家組核心成員,Oracle 深度參與 JDO 規範制定;但收購 TopLink 後,商業利益驅使其淡化 JDO 推廣,甚至在 JavaOne 非場合批評 JDO。這反映標準化與商業產品的內在張力。
JDO 2.0 關鍵提案與未來展望
- JDO/R 子規範: 專為關係資料庫優化,彌補 1.0 版對 RDBMS 功能不足(如原生 SQL、Stored Procedure、批次更新、Schema 生成)。
- FetchGroup 精細控制: 解決「載入過多/過少」難題。
- Managed Relationship: 雙向關聯自動維護,免手寫 setter 邏輯。
- Detach/Attach: 物件脫離/重新關聯 PersistenceManager,支援 Web 層 DTO 模式。
- 多表映射單一類別: 便於 DBA 調優不影響領域模型。
預估 18 個月內定案(約 2004 年底),廠商同步實作預覽版,一年後可用於生產。免費實作 (JPOX, TJDO) 降低門檻。
微軟跟進:.NET Data Objects
微軟攜手 ObjectStore 推出 .NET 版 JDO 對應技術,印證透明持久化標準化為業界共識趨勢。
結語
JDO 雖起步晚於 Hibernate,但以「存儲中立、標準化 API」定位長遠。JDO 2.0 若兌現 JDO/R 承諾,將成為 Java EE 標準持久層的有力競爭者(後來 JPA 2.0 融合兩者優點)。對開發者而言,理解 JDO 歷史有助於把握 JPA/Hibernate 設計哲學的淵源。
- 上一篇文章: Eclipse 3.0 插件開發實戰:打造天氣預報與郵件監控專屬工具欄
- 下一篇文章: Java 數據對象技術 (JDO) 深度解析:從序列化到 ORM 的演進之路
Copyright ©
程式碼之家 All Rights Reserved