Änderungen beim Verhalten von Java Persistence API 2.1

Wenn Sie bereits das Feature jpa-2.0 für Ihre Anwendungen verwenden, verwenden Sie das Feature jpa-2.0 weiterhin für Ihre vorhandenen Anwendungen, um Migrationsprobleme zu vermeiden. Für neue Anwendungen sollten Sie das Feature jpa-2.1 verwenden, das Ihnen die Verwendung der neuen Funktionen ermöglicht, die in der Spezifikation JPA 2.1 verfügbar sind. Wenn Sie Ihre vorhandenen Anwendungen vom Feature jpa-2.0 auf das Feature jpa-2.1 umstellen möchten, müssen Sie Ihre Anwendungen während des Migrationsprozesses möglicherweise anpassen.

Unterschiede zwischen jpa-2.0 und jpa-2.1

Beachten Sie, dass einige bedeutende Unterschiede zwischen den Feature jpa-2.0 und jpa-2.1 gibt. Sehen Sie sich die folgenden Informationen an:

Name der PersistenceProvider-Klasse
jpa-2.0
  • IBM® Provider: com.ibm.websphere.persistence.PersistenceProviderImpl
  • OpenJPA-Provider: org.apache.openjpa.persistence.PersistenceProviderImpl
jpa-2.1
  • org.eclipse.persistence.jpa.PersistenceProvider
Caching-Verhalten

jpa-2.0: Das Caching ist standardmäßig inaktiviert. Wenn Ihre Anwendung einen L2-Cache verwenden muss, müssen Sie diesen explizit aktivieren.

jpa-2.1: Standardmäßig sind im EclipseLink-Provider der L2-Cache und QueryCache aktiviert. Sie müssen sicherstellen, dass diese Einstellung die beste Option für Ihre Anwendungen ist. Wenn Sie in einer verteilten Umgebung arbeiten, z. B. in einem Cluster, müssen Sie den Cache inaktivieren oder sich darüber im Klaren sein, dass verschiedene Knoten verschiedene Daten haben können.

Unterschiede bei Erweiterungen/Weaving

jpa-2.0: OpenJPA setzt die Erweiterung von Entitäten voraus. Weitere Informationen finden Sie unter Erweiterungen von JPA-Entitäten für JPA 2.0 in der Produktdokumentation.

jpa-2.1: EclipseLink arbeitet mit nicht erweiterten Entitäten. WebSphere Application Server unterstützt eine statische Erweiterung.

Einige Features sind möglicherweise nicht verfügbar, wie z. B. verzögertes Laden und gewisse Leistungssteigerungen.

  • Wenn Entitätsklassen für die Verwendung mit dem Provider jpa-2.0 (OpenJPA) statisch erweitert wurden, müssen die Klassen vor der Verwendung des Providers jpa-2.1 neu kompiliert werden.
  • Wenn Liberty für die Verwendung des Features jpa-2.1 konfiguriert ist und die Entitäten durch OpenJPA-Erweiterung erweitert werden, wird der folgende Fehler ausgelöst:
    java.lang.NoClassDefFoundError: 
    org.apache.openjpa.enhance.PersistenceCapable.
  • Der Fehler NoClassDefFoundError tritt auf, weil dem Server zur Laufzeit keine OpenJPA-Klassen zur Verfügung stehen, wenn der Liberty-Server für die Verwendung von jpa-2.1 konfiguriert ist.
    • Zur Behebung dieses Problems kompilieren Sie die Anwendung erneut und stellen Sie dann sicher, dass die Entitäten nicht mit dem OpenJPA-Enhancer erweitert werden. Erweitern Sie entweder gar keine Entitäten oder erweitern Sie die Entitäten durch EclipseLink-Erweiterung und nicht durch OpenJPA-Erweiterung.
    • Alternativ können Sie die Entitäten in ihrem erweiterten Status belassen und Liberty neu konfigurieren, sodass das Feature jpa-2.0 verwendet wird. Dabei kann ein Teil der Funktionalität von JPA 2.1 verloren gehen.
Unterschiede bei der Verwendung von Datenquellen

Das Feature jpa-2.0 verwendet die Nicht-JTA-Datenquelle nur sparsam. Deshalb sind nur wenige Nicht-JTA-Datenquellenverbindungen erforderlich, wenn Sie eine Anwendung optimieren.

Der Provider jpa-2.1 verwendet eine Nicht-JTA-Datenquellenverbindung für das Lesen von Daten, wenn keine Transaktion aktiv ist. Das bedeutet, dass die Verbindungspools für Nicht-JTA-Datenquellen größer sein müssen, wenn Sie dieses Feature verwenden.

Weitere Unterschiede zwischen den beiden JPA-Providern sind auf der Webseite mit der Veröffentlichung OpenJPA -> EclipseLink Migration Guide beschrieben.

In OpenJPA verfügbare JPA 2.1-Features

OpenJPA, der JPA 2.0-Provider, enthält Features, die ähnlich wie die neuen JPA 2.1-Features funktionieren. Wenn Sie also eine vorhandene Anwendung haben, die das Feature jpa-2.0 verwendet, und einige der JPA 2.1-Features verwenden möchten, müssen Sie die Umstellung auf das Feature jpa-2.1 nicht durchführen. Stattdessen können Sie das dem neuen Feature funktional entsprechende Feature verwenden, das von OpenJPA bereitgestellt wird. Einige der in OpenJPA verfügbaren wichtigsten JPA 2.1-Features sind im Folgenden beschrieben:

Schemagenerierung

Mit diesem Feature können Sie DDL generieren oder direkt mit der Datenbank interagieren, um Tabellenschemas basierend auf der JPA-Entitätsdefinition zu definieren. Weitere Informationen finden Sie im Abschnitt 9.4 der Spezifikation JPA 2.1.

Funktional entsprechendes OpenJPA-Feature: Schemamapper

Entitätsdiagramme

Mit diesem Feature können Sie den Abruf oder die Verarbeitung eines Graphen von Entitätsobjekten angeben. Weitere Informationen finden Sie im Abschnitt 3.7 der Spezifikation JPA 2.1.

Funktional entsprechendes OpenJPA-Feature: FetchPlan und FetchGroup

Abfragen gespeicherter Prozeduren

Mit diesem Feature können Sie Prozeduren aufrufen, die in Datenbanken gespeichert sind. Weitere Informationen finden Sie im Abschnitt 3.10.17 der Spezifikation JPA 2.1.

Funktional entsprechendes OpenJPA-Feature: Abfrageaufruf

Konvertierung von Basisattributtypen

Mit diesem Feature können Sie Basisattributtypen aus der Attributentitätsdarstellung in die Datenbankdarstellung konvertieren und umgekehrt. Weitere Informationen finden Sie im Abschnitt 3.8 der Spezifikation JPA 2.1.

Funktional entsprechendes OpenJPA-Feature: Externalizer-Feature

Annotationen @Index und @ForeignKey

Weitere Informationen finden Sie in den Abschnitten 11.1.19 und 11.1.23 der Spezifikation JPA 2.1.

Funktional entsprechendes OpenJPA-Feature: @Index und @ForeignKey

Methoden des Dienstprogramms unwrap für EntityManager, Cache

Weitere Informationen finden Sie in den Abschnitten 3.1.1 und 7.10 der Spezifikation JPA 2.1.

Funktional entsprechende OpenJPA-Features: EntityManagerImpl.unwrap() und OpenJPAPersistence.cast()

Objekterstellung bei der Zuordnung von Ergebnissen nativer SQL

Weitere Informationen finden Sie im Abschnitt 3.10.16.2.2 der Spezifikation JPA 2.1.

Funktional entsprechendes OpenJPA-Feature: Objekt ResultShape


Symbol das den Typ des Artikels anzeigt. Konzeptartikel

Dateiname: cwlp_jpa21_behavior.html