跳至內容

Java 持久化/什麼是 JPA?

來自 Wikibooks,開放世界中的開放書籍

Java 持久化 API (JPA) 是一個 Java 規範,用於訪問、持久化和管理 Java 物件/類與關係型資料庫之間的資料。JPA 被定義為 EJB 3.0 規範的一部分,用於替代 EJB 2 CMP 實體 Bean 規範。JPA 現在被認為是 Java 行業中物件關係對映 (ORM) 的標準行業方法。

JPA 本身只是一個規範,而不是一個產品;它本身無法執行持久化或任何其他操作。JPA 只是一個介面集,需要實現。可以選擇開源和商業 JPA 實現,任何 Java EE 5 應用程式伺服器都應提供對其使用的支援。JPA 還需要一個數據庫來持久化。

JPA 允許 POJO (Plain Old Java Objects) 輕鬆持久化,而無需類實現任何介面或方法,如 EJB 2 CMP 規範所要求的那樣。JPA 允許透過標準註釋或 XML 定義物件的物件關係對映,這些註釋或 XML 定義了 Java 類如何對映到關係型資料庫表。JPA 還定義了一個執行時 EntityManager API,用於處理針對資料庫的物件查詢和事務。JPA 定義了一個面向物件的查詢語言 JPQL,以允許從資料庫查詢物件。

JPA 是幾個 Java 持久化規範中的最新規範。第一個是 OMG 持久化服務 Java 繫結,它從未獲得過成功。接下來是 EJB 1.0 CMP 實體 Bean,它在被大型 Java EE 提供商(BEA、IBM)採用方面非常成功,但一些使用者對該規範對實體 Bean 的要求過於複雜以及開銷和效能低下表示反對。EJB 2.0 CMP 試圖透過引入本地介面來降低實體 Bean 的部分複雜性,但大部分複雜性仍然存在。EJB 2.0 還缺乏可移植性,因為定義物件關係對映的部署描述符未被指定,並且都是專有的。

這種反對意見在一定程度上導致了另一個 Java 持久化規範的建立,即 JDO (Java Data Objects)。JDO 獲得了一些獨立供應商(如 Kodo JDO)的“狂熱”追隨者,以及幾個開源實現,但從未在大型 Java EE 供應商中取得太大成功。

儘管存在 EJB CMP 和 JDO 這兩種競爭的 Java 持久化標準,但大多數使用者仍然更喜歡專有 API 解決方案,主要是 TopLink (它已經存在了一段時間,並且有自己的 POJO API) 和 Hibernate (它是一個相對較新的開源產品,它也有自己的 POJO API,並且迅速成為開源行業標準)。以前由 WebGain 擁有的 TopLink 產品也被 Oracle 收購,從而增加了其在 Java EE 社群中的影響力。

對 EJB CMP 的反對只是對所有 Java EE 的反對的一部分,Java EE 被認為過於複雜,並促使 Spring 容器等產品的出現。這導致 EJB 3.0 規範的主要目標是降低複雜性,這使規範委員會走上了 JPA 的道路。JPA 的目的是統一 EJB 2 CMP、JDO、Hibernate 和 TopLink 的 API 和產品,並且似乎在實現這一目標方面非常成功。

目前,大多數持久化供應商已經發布了 JPA 實現,從而確認了行業和使用者對其的採用。其中包括 Hibernate(被 JBoss 收購,被 Red Hat 收購)、TopLink(被 Oracle 收購)和 Kodo JDO(被 BEA 收購,被 Oracle 收購)。其他已經新增對 JPA 支援的產品包括 Cocobase(由 Thought Inc. 擁有)和 DataNucleus(以前的 JPOX)。

華夏公益教科書