![[8.5.5.6 或更新版本]](../ng_v8556.gif)
Java Persistence API (JPA)
「資料持續性」對應用程式的意義在於,持續保存和擷取永久儲存體系統中的資訊。由於需要存取關聯式資料庫,持續性對企業應用程式很重要。針對這種環境開發的應用程式必須自行管理持續性,或是使用協力廠商的解決方案,透過持續性來處理資料的更新和擷取。從 EJB 3.0 規格起,「Java™ 持續性 API (JPA)」提供一種機制,來管理持續性以及物件/關聯對映和功能。
JPA 規格本身就會在內部定義物件/關聯對映,而不倚靠供應商專用的對映實作。JPA 是以適用於 Java Enterprise Edition (Java EE) 環境的 Java 程式設計模型為基礎,但是 JPA 也可以在用來測試應用程式功能的 Java SE 環境內運作。
JPA 代表簡化的持續性程式設計模型。JPA 規格會明確定義物件/關聯對映,而不倚靠供應商專用的對映實作。JPA 使用註釋或 XML,將物件對映至一或多個資料庫表格,來將物件/關聯對映的作業標準化。為了進一步簡化持續性程式設計模型:
- EntityManager API 可以在資料庫中持續保存、更新、擷取或移除物件。
- EntityManager API 和物件/關聯對映 meta 資料可處理大部分的資料庫作業,您不需要撰寫 JDBC 或 SQL 程式碼來維護持續性。
- JPA 提供的查詢語言是獨立 EJB 查詢語言(亦稱為 JPQL)的延伸,可供您用來擷取物件,而不必撰寫您所用資料庫專用的 SQL 查詢。
依照設計,JPA 同時在 Java Enterprise Edition (Java EE) 儲存器內部和外部運作。當您在儲存器內執行 JPA 時,應用程式可以使用儲存器來管理持續性環境定義。如果沒有儲存器可用來管理 JPA,應用程式必須自行處理持續性環境定義的管理。設計成由儲存器管理持續性的應用程式在處理持續性時,雖不需要大量的程式碼實作,但是這些應用程式無法在儲存器外部使用。會管理自己的持續性的應用程式可以在儲存器環境或 Java SE 環境中運作。
支援 EJB 3.x 程式設計模型的 Java EE 儲存庫必須支援 JPA 實作,因此亦稱為持續性提供者。JPA 持續性提供者使用下列元素,能在 EJB 3.x 環境中更容易管理持續性:
- 持續性單元
- 定義一個與關聯式資料庫之間的完整「物件/關聯模型」對映 Java 類別(實體 + 支援結構)。EntityManagerFactory 會使用此資料,來建立可透過 EntityManager 存取的持續性環境定義。
- EntityManagerFactory
- 用來建立 EntityManager,以便與資料庫互動。應用程式伺服器儲存器通常會提供此功能,但是如果您使用 JPA 應用程式管理的持續性,就需要 EntityManagerFactory。一個 EntityManagerFactory 實例代表一項持續性環境定義。
- 持續性環境定義
- 定義應用程式目前正在操作的一組作用中實例。您可以手動或透過注入,來建立持續性環境定義。
- EntityManager
- 這種資源管理程式負責維護應用程式正在使用的作用中實體物件集合。EntityManager 會處理資料庫互動,以及物件/關聯對映的 meta 資料。一個 EntityManager 實例代表一項持續性環境定義。儲存器中的應用程式可以取得 EntityManager,其方式是藉由注入至應用程式,或是在 Java 元件名稱空間中查閱它。如果應用程式會管理其持續性,則會從 EntityManagerFactory 取得 EntityManager。
- 實體物件
- 一個簡易的 Java 類別,以其最簡易的形式呈現資料庫表格中的列。實體物件可以是具體類別或抽象類別。它們會利用內容或欄位來維護狀態。