Java Persistence API (JPA)
Datenpersistenz ist ein Mittel, mit dem eine Anwendung Informationen in einem nicht flüchtigen Speichersystem persistent speichern und aus diesem abrufen kann. Persistenz ist für Unternehmensanwendungen notwendig, weil diese auf relationale Datenbanken zugreifen müssen. Für diese Umgebung entwickelte Anwendungen müssen die Persistenz eigenständig verwalten oder Lösungen anderer Anbieter für die Datenbankaktualisierungen und für den Abruf von Informationen aus der Datenbank mit Persistenz einsetzen. Java™ Persistence API (JPA) stellt seit der Veröffentlichung der EJB 3.0-Spezifikationen einen Mechanismus für die Verwaltung von Persistenz, objektrelationaler Zuordnung und Funktionen bereit.
Die JPA-Spezifikation definiert die objektrelationale Zuordnung intern und stützt sich nicht auf anbieterspezifische Zuordnungsimplementierungen. JPA basiert auf dem Java-Programmiermodell für Java Enterprise Edition (Java EE)-Umgebungen, kann aber auch für das Testen von Anwendungsfunktionen in einer Java SE-Umgebung eingesetzt werden.
JPA ist eine Vereinfachung des Programmiermodells für Persistenz. Die JPA-Spezifikation definiert die objektrelationale Zuordnung explizit und stützt sich nicht auf anbieterspezifische Zuordnungsimplementierungen. JPA standardisiert die wichtige Aufgabe der objektrelationalen Zuordnung mithilfe von Annotationen oder XML, um Objekte einer oder mehreren Tabellen einer Datenbank zuzuordnen. Die folgenden Optionen stehen für eine weitere Vereinfachung des Programmiermodells für Persistenz zur Verfügung:
- Die EntityManager-API kann Objekte persistent in einer Datenbank speichern, aktualisieren, abrufen und entfernen.
- Die EntityManager-API und die Metadaten für die objektrelationale Zuordnung verarbeiten die meisten Datenbankoperationen, ohne dass Sie JDBC- oder SQL-Code für die Verwaltung der Persistenz schreiben müssen.
- JPA stellt eine Abfragesprache bereit, die die unabhängige EJB-Abfragesprache (auch als JPQL bekannt) erweitert und mit der Sie Objekte abrufen können, ohne spezielle SQL-Abfragen für die Datenbank schreiben zu müssen, mit der Sie arbeiten.
JPA kann innerhalb und außerhalb eines Java Enterprise Edition-Containers (Java EE) eingesetzt werden. Wenn Sie JPA in einem Container ausführen, können die Anwendungen den Container für die Verwaltung des Persistenzkontexts verwenden. Falls es keinen Container für die Verwaltung von JPA gibt, muss die Anwendung den Persistenzkontext eigenständig verwalten. Für Container-managed Persistence (CMP) bestimmte Anwendungen ist keine umfangreiche Codeimplementierung für die Persistenzverarbeitung erforderlich, allerdings können diese Anwendungen nicht außerhalb eines Containers verwendet werden. Anwendungen, die ihre Persistenz eigenständig verwalten, können in einer Containerumgebung und in einer Java SE-Umgebung eingesetzt werden.
Java EE-Container, die das EJB 3.x-Programmiermodell unterstützen, müssen eine JPA-Implementierung, die auch als Persistenzprovider bezeichnet wird, unterstützen. Ein JPA-Persistenzprovider verwendet die folgenden Elemente, um die Persistenzverwaltung in einer EJB 3.x-Umgebung zu vereinfachen.
- Persistenzeinheit
- Definiert ein vollständiges objektrelationales Modell, das Java-Klassen (Entitäten + unterstützende Strukturen) einer relationalen Datenbank zuordnet. Die EntityManagerFactory verwendet diese Daten, um einen Persistenzkontext zu erstellen, der über den EntityManager zugänglich ist.
- EntityManagerFactory
- Wird verwendet, um einen EntityManager für Datenbankinteraktionen zu erstellen. Diese Funktion wird gewöhnlich vom Anwendungsserver-Container bereitgestellt, aber die EntityManagerFactory ist erforderlich, wenn Sie die von JPA-Anwendungen verwaltete Persistenz verwenden. Eine EntityManagerFactory-Instanz stellt einen Persistenzkontext dar.
- Persistenzkontext
- Definiert die Gruppe aktiver Instanzen, die momentan von der Anwendung bearbeitet werden. Sie können den Persistenzkontext manuell oder durch Injektion erstellen.
- EntityManager
- Der Ressourcenmanager, der die aktive Sammlung von Entitätsobjekten verwaltet, die von der Anwendung verwendet werden. Der EntityManager verarbeitet die Datenbankinteraktionen und die Metadaten für objektrelationale Zuordnungen. Eine EntityManager-Instanz stellt einen Persistenzkontext dar. Eine Anwendung in einem Container kann die EntityManager-Instanz durch Injektion in die Anwendung oder durch Suchen der Instanz im Namespace der Java-Komponente abrufen. Wenn die Anwendung ihre Persistenz eigenständig verwaltet, wird die EntityManager-Instanz aus der EntityManagerFactory abgerufen.
- Entitätsobjekte
- Eine einfache Java-Klasse, die eine Zeile in einer Datenbanktabelle in ihrer einfachsten Form darstellt. Entitätsobjekte können konkrete oder abstrakte Klassen sein. Sie verwalten Status mithilfe von Eigenschaften oder Feldern.