Java™
Persistence API (JPA) ist eine vereinfachte Form des Persistenzprogrammiermodells.
Die Datenpersistenz, also die Fähigkeit, Daten über Anwendungssitzungen hinweg in einer Art nicht flüchtigem Speicher
(z. B. einer relationalen Datenbank) beizubehalten, ist für Unternehmensanwendungen
von wesentlicher Bedeutung. Anwendungen, die für diese Umgebung entwickelt werden, müssen die Datenpersistenz entweder selbst verwalten oder aber
Lösungen anderer Anbieter einsetzen, um Datenbankaktualisierungen und -abfragen zu verarbeiten. JPA bietet einen Mechanismus für die Verwaltung der
Datenpersistenz und der objektrelationalen Zuordnung und kann im
Rahmen der EJB 3.0-Spezifikationen genutzt werden.
JPA basiert auf dem Java-Programmiermodell, das bei Java
EE-Umgebungen angewendet wird, kann jedoch auch in der Java SE-Umgebung eingesetzt werden. Die JPA-Spezifikation definiert
die objektrelationale Zuordnung intern, statt sich auf herstellerspezifische Zuordnungsimplementierungen zu
stützen, und ordnet Objekte in Datenbanktabellen entweder über Annotationen oder über XML zu.
JPA kann sowohl innerhalb als auch außerhalb eines Java-EE-Containers
(Java Enterprise
Edition) eingesetzt werden. Bei der Ausführung von JPA in einem Container können Anwendungen den Container
verwenden, um die Persistenz zu verwalten. Falls kein Container für die JPA-Verwaltung existiert, muss die
Anwendung die Persistenzverwaltung selbst ausführen.
Anwendungen, die für
Container-managed Persistence vorgesehen sind, können nicht außerhalb eines Containers verwendet werden.
Anwendungen hingegeben, die ihre Persistenz selbst verwalten,
können in einer Containerumgebung oder einer Java SE-Umgebung ausgeführt werden.
JPA bietet eine Abfragesprache (JPQL), mit der Sie Objekte abrufen können, ohne für die eingesetzte
Datenbank spezifische SQL-Abfragen schreiben zu müssen.
Java EE-Container, die JPA unterstützen, müssen
einen Persistenzprovider bereitstellen. Ein JPA-Persistenzprovider verwendet die folgenden
Elemente, um Daten in einer EJB 3.0-Umgebung als persistent zu definieren:
- Entitätsobjekte: Eine
Entität ist eine einfache Java-Klasse, die
eine Zeile in einer Datenbanktabelle darstellt. Bei Entitäten kann es sich um konkrete Klassen oder um abstrakte Klassen
handeln. Sie verwalten Statusinformationen über Eigenschaften oder Felder.
- EntityManager: Ein EntityManager-Objekt verwaltet
die aktive Erfassung von Entitätsobjekten, die von der Anwendung verwendet
werden. Das EntityManager-Objekt handhabt die Interaktion mit der Datenbank
und die Metadaten für objektrelationale Zuordnungen. Eine Instanz eines EntityManager-Objekts stellt einen
Persistenzkontext dar. Eine Anwendung in einem Container kann das EntityManager-Objekt entweder durch eine Injektion
in der Anwendung oder durch eine Suche im Java-Komponentennamespace
abrufen. Wenn die Anwendung ihre Persistenz verwaltet, wird das
EntityManager-Objekt aus dem EntityManagerFactory-Objekt abgerufen. Diese Funktion wird normalerweise von den
Anwendungsservercontainern bereitgestellt. Wenn Sie jedoch die anwendungsverwaltete JPA-Persistenz
verwenden, ist das EntityManagerFactory-Objekt erforderlich.
Anmerkung: Die Injektion des EntityManager-Objekts wird nur für folgende Artefakte unterstützt:
- EJB 3.0-Session-Beans.
- EJB 3.0-Message-driven-Beans.
- Servlets (in JSPs wird die Injektion jedoch nicht unterstützt).
- Hauptklasse des Anwendungsclients.
- EntityManagerFactory: Die Factory wird verwendet, um ein EntityManager-Objekt für Interaktionen
mit Datenbanken zu erstellen.
- Persistenzeinheit: Eine Persistenzeinheit besteht aus den deklarativen
Metadaten, die die Beziehungen von Entitätsklassenobjekten zu einer relationalen Datenbank beschreiben. Das EntityManagerFactory-Objekt erstellt mithilfe dieser Daten einen Persistenzkontext,
auf den über das EntityManager-Objekt zugegriffen werden kann.
- Persistenzkontext: Der Persistenzkontext ist der Satz aktiver Instanzen,
die die Anwendung bearbeitet. Der Persistenzkontext kann manuell oder über Injektion erstellt werden.