![[8.5.5.6 或更新版本]](../ng_v8556.gif)
Java Persistence API 2.1 行為的變更
如果您的應用程式採用 jpa-2.0 特性,建議您繼續讓現有的應用程式繼續採用 jpa-2.0 特性,以防發生任何移轉問題。若是新的應用程式,建議您使用 jpa-2.1 特性,以便充分利用 JPA 2.1 規格所提供的新特性。如果您想讓現有的應用程式改用 jpa-2.1 特性,而不使用 jpa-2.0 特性,可能需要在移轉程序中調整應用程式。
jpa-2.0 與 jpa-2.1 之間的差異
以下是 jpa-2.0 與 jpa-2.1 特性之間幾項您需要注意的主要差異:
- PersistenceProvider 類別名稱
- jpa-2.0
- IBM® 提供者:com.ibm.websphere.persistence.PersistenceProviderImpl
- OpenJPA 提供者:org.apache.openjpa.persistence.PersistenceProviderImpl
- jpa-2.1
- org.eclipse.persistence.jpa.PersistenceProvider
- 快取行為
-
jpa-2.0:依預設會停用快取。如果您的應用程式需要利用 L2 快取,必須明確啟用它。
-
jpa-2.1:依預設,EclipseLink 提供者會啟用 L2 快取和 QueryCache。您必須確定這項設定是您應用程式的最佳選項。如果您是在叢集等之類的分散式環境中執行,則需要停用快取,或是瞭解不同的節點可能有不同的資料。
- 加強 / 編排差異
-
jpa-2.0:OpenJPA 需要加強實體。如需相關資訊,請參閱加強 JPA 實體說明文件。
-
jpa-2.1:EclipseLink 可以搭配未加強的實體使用。WebSphere Application Server 支援靜態加強。
有些特性可能無法使用,例如:延遲載入和某些效能的提昇。
- 如果實體類別經過靜態加強,以便與 jpa-2.0 (OpenJPA) 提供者搭配使用,在使用 jpa-2.1 提供者之前,必須重新編譯這些類別。
- 資料來源用法的差異
-
jpa-2.0 特性很少使用 non-jta-datasource,因此當您調整應用程式時,需要建立少量的 non-jta-datasource 連線。
jpa-2.1 在讀取資料以及交易不在作用中時,就會使用 non-jta-datasource 連線。也就是說,當使用這項特性時,需要較大的 non-jta-datasource 連線儲存區。
如需瞭解這兩個 JPA 提供者之間的其他差異,請參閱 OpenJPA -> EclipseLink 移轉指南頁面。
OpenJPA 所提供的 JPA 2.1 特性
OpenJPA 是 JPA 2.0 提供者,它有一些特性的運作方式類似於 JPA 2.1 的新特性。也就是說,如果您的現有應用程式使用 jpa-2.0 特性,而想使用一些 JPA 2.1 新特性,並不需要切換至 jpa-2.1 特性。對於新特性,您倒是可以使用 OpenJPA 所提供的同等特性。OpenJPA 所提供的部分 JPA 2.1 重要特性如下:
- 綱目產生
-
此特性可讓您產生 DDL,或直接與資料庫互動,以根據 JPA 實體定義來定義表格綱目。如需相關資訊,請參閱 JPA 2.1 規格第 9.4 節。
OpenJPA 同等特性:綱目對映器
- 實體圖形
-
此特性可讓您指定實體物件圖形的提取或處理方式。如需相關資訊,請參閱 JPA 2.1 規格第 3.7 節。
OpenJPA 同等特性:FetchPlan 和 FetchGroup
- 儲存程序查詢
此特性可讓您呼叫儲存在資料庫中的程序。如需相關資訊,請參閱 JPA 2.1 規格第 3.10.17 節。
OpenJPA 同等特性:查詢呼叫
- 基本屬性類型的轉換
-
此特性可讓您在屬性實體表示法與資料庫表示法之間,轉換基本類型屬性。如需相關資訊,請參閱 JPA 2.1 規格第 3.8 節。
OpenJPA 同等特性:外部化程式特性
- @Index 和 @ForeignKey 註釋
-
請參閱 JPA 2.1 規格的第 11.1.19 節與第 11.1.23 節。
OpenJPA 同等特性:OpenJPA 的 @Index 和 @ForeignKey
- EntityManager、Cache 的 unwrap 公用程式方法
-
請參閱 JPA 2.1 規格的第 3.1.1 節與第 7.10 節。
OpenJPA Externalizer:EntityManagerImpl.unwrap() 和 OpenJPAPersistence.cast()
- 對映原生 SQL 結果時的物件建構
-
請參閱 JPA 2.1 規格的第 3.10.16.2.2 節。
OpenJPA 同等特性:ResultShape 物件