JDO (Java Data Objects)
優點
- 正確的生命週期狀態機:任何嚴肅 O/R Mapper 應採用或子集化。JDO 實作者需深入理解,應用開發者通常無感。
- PersistenceManager API:管理物件狀態具備價值。
缺點
- 查詢支援不足:應採類 Hibernate HQL,並以
java.sql.ResultSet 為結果基礎。
- 欄位提升為多載方法設計混亂:建議採用 Hibernate/EJB CMP 風格:先定義方法再多載。
Hibernate
優點
- 正確的資料模型:POJO + 方法為基礎,方向正確。
- 優秀的配置機制:關聯映射配置靈活強大。
- HQL:幾乎是完美的 O/R 映射查詢語言。
- 完整 API:
Session 遵循 Connection 模型,控制流清晰。
缺點
- 未採用 JDO 生命週期:理論上不正確。
- API 仍有混亂處:查詢參數存在實作漏洞,若以
ResultSet 為基礎會更乾淨。
- 類名作為表識別符:不一定是好設計。
EJB / CMP (Container Managed Persistence)
優點
- 工廠模式 (Home 介面) 查找實例:優於向 Session/Connection 傳遞額外參數。
- ejbSelect:同理優於參數傳遞。
- 抽象綱要 (Abstract Schema) 命名查詢:良好解決方案。
- 理論上特定場景下物件復用效率更高。
缺點
- CMP 不屬於 EJB 規範核心:被強行扭曲適配不適合的模型。無非政治理由可讓 CMP 留在 EJB 3.0 中 (事實上 EJB 3.0 已以 JPA 取代)。
Amber (實驗性 API)
優點
- 採用 JDBC ResultSet 與 PreparedStatement 進行查詢:O/R Mapper 不應拋棄強大的 JDBC 標準 API 而自創不完善替代品。查詢語言應擴充 SQL (如 HQL),結果集用
ResultSet,參數用 PreparedStatement。可為特定子集 (如單實體查詢) 添加專用 API,但基礎必須是標準 JDBC。
缺點
- 研究價值遠大於實用價值:屬實驗性 API,非生產就緒產品。
綜合建議
- 企業級標準化、容器管理服務需求強 → EJB 3.0 / JPA (Hibernate/EclipseLink 實作)。
- 輕量級、POJO 導向、豐富領域模型、靈活查詢 → Hibernate / JPA。
- 純物件持久化、細粒度控制、無容器依賴 → JDO (DataNucleus 等實作)。
- Amber 僅供學術研究參考。
趨勢:JPA (Java Persistence API) 整合了 Hibernate 最佳實踐、修正 EJB CMP 缺陷、吸收 JDO 生命週期精華,成為 Java 持久化標準。現代架構首選 Spring Data JPA / Jakarta EE JPA。