Java 持久化 API（JPA）是一個 Java 應用程式介面規範，描述了使用 Java 標準版平臺（Java SE）和 Java 企業版平臺（Java EE）的應用中的關係資料的管理。 持久化，在這裡包括三個層面的意思： API 本身，定義在 javaxpersistence 包內 Java 持久化查詢語言（JPQL） 物件 關係元資料 JPA 的參考實現是。 歷史背景 2006 年 5 月 11 號，JPA 10 規範作為 JCP JSR 220 的一部分最終被髮布。JPA 20 規範，在 2009 年 12 月釋出（Java EE 6 平臺，依賴於 JPA 20）JPA 21 規範，在 2013 年 4 月 22 日釋出（Java EE 7 平臺，依賴於 JPA 21）。 實體 持久化實體是一個輕量級的 Java 類，其狀態通常持久地儲存到關係資料庫的表中。這種實體的例項對應於表中的各個行。實體之間通常有關係，這些關係透過物件 關係元資料表示。可以在實體類檔案中直接使用註釋來指定這種關係，也可以在隨應用程式分發的單獨 XML 描述檔案中指定。 Java 持久化查詢語言（JPQL） Java 持久化查詢語言（JPQL）對儲存在關係資料庫中的實體進行查詢。查詢在語法上類似於 SQL 查詢，但是操作的是實體物件而不是直接對資料庫表進行操作。 動機 在引入 EJB 30 規範之前，許多企業級 Java 開發人員使用由持久化框架（例如 Hibernate）或資料訪問物件（DAO）提供的輕量級持久化物件，來代替實體 bean（EJB 的一種）。 這是因為在以前的 EJB 規範中，實體 bean 需要太多複雜的程式碼和繁重的資源佔用，並且由於 bean 和 DAO 物件或持久化框架之間的原始碼中的互連和依賴性，它們只能在 Java EE 應用程式伺服器中使用。 因此，最初在第三方永續性框架中提供的許多功能都被合併到 Java 持久化 API 中，並且從 2006 年開始，像 Hibernate（版本 32）和 TopLink Essentials 這樣的專案已經實現 Java 持久化 API 規範。 相關技術 企業 JavaBeans（EJB） EJB 30 規範（本身是 Java EE 5 平臺的一部分）包含 Java 持久化 API 的定義。 無論如何，終端使用者不需要 EJB 容器或 Java EE 應用程式伺服器即可執行使用此永續性 API 的應用程式。Hibernate EntityManager Java SE environments Hibernate EntityManager Obtaining an EntityManager in a Java SE environment Java 持久化 API 的未來版本將在單獨的 JSR 和規範中定義，而不是在 EJB JSR 規範中定義。 Java 持久化 API 取代了 EJB 20 CMP（持久化管理容器）的永續性解決方案 Java 資料物件的 API Java 持久化 API 作為統一 Java Data Objects API 和 EJB 20 容器管理永續性（CMP）API 的一部分來開發。截至 2009 年，支援這些 API 的大多數產品都支援 Java 持久化 API。 Java 持久化 API 僅為關係資料庫管理系統提供持久化特性。也就是說，JPA 專注於物件關係對映（ORM）（請注意，除了關係資料庫之外，還有 JPA 提供程式支援其他資料庫模型，但這超出了 JPA 的設計範圍）。有關 JPA 角色的說明，請參閱 JPA 2 規範第 1 節簡介，其中非常清楚地說明 這項工作的技術目標是為 Java 應用程式開發人員提供一個物件 關係對映工具，使用 Java 領域模型來管理關係資料庫。 Java 資料物件規範支援 ORM，以及對其他型別的資料庫模型的持久化，例如平面檔案資料庫和 NoSQL 資料庫，包括文件資料庫，圖形資料庫，以及字面上任何其他可想到的資料儲存。 服務資料物件 API Java 持久化 API 的設計者旨在提供關係持久化，其中許多關鍵領域來自物件關係對映工具，如 Hibernate 和 TopLink。Java 持久化 API 改進並取代了 EJB 20，其體現在 EJB 30 中。服務資料物件（SDO）API（JSR 235）與 Java 持久化 API 有著截然不同的目標，被認為是互補的。SDO API 專為面向服務的體系結構，多種資料格式而非關係資料和多種程式語言而設計。JCP 管理 SDO API 的 Java 版本；SDO API 的 C 版本透過 OASIS 進行管理。 Hibernate Hibernate 為 Java 提供了一個開源的物件關係對映框架。版本 32 及更高版本提供了 Java 持久化 API 的實現。Gavin King 創立了 Hibernate 專案。他代表 JBoss 參加 JSR 220，這是負責開發 JPA 的 JCP 專家組。這引發了圍繞 JPA 和 Hibernate 之間關係的持續爭議和猜測。Sun Microsystems 表示，這些想法來自幾個框架，包括 Hibernate 和 Java 資料物件。 Spring Data JPA 抽象儲存庫的實現是 Java 應用程式框架 Spring 的領域驅動設計的關鍵構建塊。透明地支援所有可用的 JPA 實現，並支援 CRUD 操作以及方便地執行資料庫查詢。 JPA 20 2007 年 7 月，JPA 20 在 JCP 的 JSR 317 請求中作為新版本開發。2009 年 12 月 10 日，JPA 20 被批准為最終正式標準。JPA 20 的重點是提供一些流行的 ORM 供應商中存在的特性，但在 JPA 10 中不能獲得一致認可。 主要特性包括： 擴大物件關係功能的對映 支援內嵌物件的收集，透過多對一的關係對映來連線 ORM 有序列表 訪問型別的組合 一種標準查詢 API 標準化的 SQL 提示 標準化的附加元資料，以支援 DDL 生成 支援驗證 支援共享物件的快取記憶體 支援 JPA 20 的供應商 Batoo JPA DataNucleus formerly JPOX EclipseLink formerly Oracle TopLink IBM for WebSphere Application Server JBoss with Hibernate Kundera ObjectDB OpenJPA OrientDB from Orient Technologies Versant Corporation JPA not relational object database JPA 21 2011 年 7 月，JPA 21 在 JCP 的 JSR 338 請求中作為新版本開發。2013 年 5 月 22 日，JPA 21 被批准為最終正式標準。 主要特性包括： 轉換器 允許自定義的程式碼去裝換不同的資料庫和資料型別。 標準 UpdateDelete 允許透過標準 API 批次更新和刪除。 實體圖表 允許獲取部分或合併物件。 JPQL 標準增強 運算元查詢，通用資料庫的功能，Join 聯合查詢，TREAT 選項。 模式生成 儲存過程，允許查詢被定義為資料庫的儲存過程。 支援 JPA 21 的供應商 DataNucleus EclipseLink Hibernate JPA 22 2017 年，JPA 22 在 JCP 的 JSR 338 請求中作為維護版本釋出開發。維護審查已於 2017 年 6 月 19 日獲得批准。 主要特性包括： 給所有有關的註釋新增 Repeatable 允許所有 JPA 註釋可用於元的註釋。 新增查詢結果流處理能力 允許 AttributeConverters 的 CDI 注入 支援 Java 8 的日期和時間型別 支援 JPA 22 的供應商 DataNucleus EclipseLink（自 27 版本以來） Hibernate （自 53 版本以來） JPA 的未來工作 未來的 JPA 規範資訊可在此處獲得： JPA Specification Mailing Lists JPA Specification JIRA 2015 年 11 月，Linda DeMichiel 在 javaeespec 使用者郵件中宣佈 Lukas Jungmann 接任規範化主管。Linda 的宣告還表示，計劃在 Java EE 8 時間框架內為 JPA 22 做 MR。 工具 NetBeans Jeddict Eclipse JPA（Dali） 參見 NET Persistence API（NPA） JDBC MyBatis OpenXava pureQuery SAP NetWeaver Application Server XQJ ObjectiveSql 參考文獻 外部連結 一般資訊 Documentation for the final version of the EJB3 spec called JSR220 GlassFishs Persistence page JCP Persistence page 教程 Java EE 6 Persistence API Javadoc Java EE 6 Persistence API tutorial Java EE 7 Persistence API Javadoc Java EE 7 Persistence API tutorial JPA Tutorial by Prasad Kharkar JPA Tutorial from Java Code Geeks JPA Tutorial using OpenJPA as implementation Persistence in the Java EE 5 tutorial CategoryJava 企業平臺 CategoryJava 規範請求 Category 物件關係對映