EntityManager

Die EntityManager-Schnittstelle ist eine API, die den Lebenszyklus einer Entitäteninstanz verwaltet.

Entitäten können sich in der relationalen Datenbank nicht selbst als persistent definieren. Annotationen werden lediglich dazu verwendet, ein POJO als Entität zu deklarieren oder seine Zuordnung und Beziehungen zu den entsprechenden Tabellen in der relationalen Datenbank zu definieren.

In JPA wird die EntityManager-Schnittstelle dazu verwendet, Anwendungen die Verwaltung von und Suche nach Entitäten in der relationalen Datenbank zu ermöglichen.

EntityManager ist eine API, die den Lebenszyklus von Entitäteninstanzen verwaltet. Ein EntityManager-Objekt verwaltet einen Satz von Entitäten, die von einer Persistenzeinheit definiert werden. Jede EntityManager-Instanz wird einem Persistenzkontext zugeordnet. Ein Persistenzkontext definiert den Bereich, in dem bestimmte Entitäteninstanzen über die APIs, die EntityManager bereitstellt, erstellt, als persistent definiert und entfernt werden. Ein Persistenzkontext ist vom Konzept her gesehen teilweise einem Transaktionskontext ähnlich.

Der Entitätsmanager (Entity Manager) überwacht alle Entitätsobjekte innerhalb eines Persistenzkontexts hinsichtlich Änderungen und Aktualisierungen und schreibt diese Änderungen in die Datenbank. Sobald ein Persistenzkontext geschlossen wird, wird die Zuordnung sämtlicher verwalteter Entitätsobjektinstanzen zum Persistenzkontext und dem zugeordneten Entitätsmanager aufgehoben und sie werden nicht länger verwaltet. Sobald die Zuordnung eines Objekts zu einem Persistenzkontext aufgehoben ist, kann eine Verwaltung durch einen Entitätsmanager nicht mehr stattfinden und sämtliche Zustandsänderungen an dieser Objektinstanz werden nicht mit der Datenbank synchronisiert.

Verwaltete und nicht verwaltete Entitäten

Eine Entitätsobjektinstanz wird entweder durch einen Entitätsmanager verwaltet (ist zugeordnet) oder nicht verwaltet (ist nicht mehr zugeordnet).

Wenn eine Entität einem Entitätsmanager zugeordnet ist, überwacht der Manager sämtliche Änderungen an der Entität und synchronisiert sie mit der Datenbank, sobald der Entitätsmanager entscheidet, den Zustand zur Synchronisation in der Datenbank zu erzwingen.

Ist die Zuordnung einer Entität aufgehoben und ist daher keine Zuordnung zu einem Persistenzkontext mehr gegeben, wird sie nicht mehr verwaltet und ihre Zustandsänderungen werden vom Entitätsmanager nicht verfolgt.

Die Verwaltung und die Zuordnung von Entitäteninstanzen werden aufgehoben, wenn ein Transaktionsbereich oder ein erweiterter Persistenzkontext beendet wird. Eine wichtige Konsequenz dieser Tatsache ist, dass Entitäten, deren Zuordnung aufgehoben wurde, serialisiert und über das Netz an einen fernen Client gesendet werden können. Der Client kann an diesen serialisierten Objektinstanzen per Fernzugriff Änderungen vornehmen und sie wieder an den Server senden, damit sie wieder in der Datenbank zusammengeführt und mit der Datenbank synchronisiert werden.

Anmerkung: Dieses Verhalten unterscheidet sich vom Verhalten des EJB 2.1-Entitätsmodells, bei dem Entitäten immer vom Container verwaltet werden. Da Sie in EJB 3.0 mit Entitäten arbeiten, bei denen es sich um POJOs handelt, kann dies die Vorgehensweisen beim Entwerfen von Java™ EE-Anwendungen vereinfachen, da Sie nicht gezwungen sind, Muster wie Datenübertragungsobjekte zwischen der Geschäftslogikebene (Session-Beans) und der Persistenzebene zu verwenden.

Operationen des Entitätsmanagers

Im Folgenden werden die Hauptoperationen aufgeführt, die von einem Entitätsmanager ausgeführt werden können:
Tabelle 1. Operationen des Entitätsmanagers. In der Tabelle sind Operationen des Entitätsmanagers beschrieben.
Operation Beschreibung
persist
  • Einfügen einer neuen Entitäteninstanz in die Datenbank.
  • Speichern des persistenten Zustands der Entität und sämtlicher Eignerbeziehungsreferenzen.
  • Die Entitäteninstanz wird zu einer verwalteten Entitäteninstanz.
find Abrufen einer verwalteten Entitäteninstanz mit einer angegebenen persistenten Identität (Primärschlüssel). Wird keine Entitäteninstanz gefunden, wird der Wert null zurückgegeben.
remove Löschen einer verwalteten Entität mit der angegebenen persistenten Identität aus der Datenbank.
merge Zustand einer Entität mit aufgehobener Zuordnung wird mit einer verwalteten Kopie der Entität mit aufgehobener Zuordnung zusammengeführt. Die verwaltete Entität, die zurückgegeben wird, weist eine andere Java-Identität auf als die Entität mit aufgehobener Zuordnung.
refresh Erneutes Laden des Entitätszustands aus der Datenbank.
lock Festlegen des Sperrmodus für ein Entitätsobjekt, das im Persistenzkontext enthalten ist.
flush Erzwingen der Synchronisation mit der Datenbank.
contains Feststellen, ob eine Entität im aktuellen Persistenzkontext enthalten ist.
createQuery Erstellen einer Abfrageinstanz mit dynamischer Java Persistent Query Language.
createNamedQuery Erstellen einer Instanz einer vordefinierten Abfrage.
createNativeQuery Erstellen einer Instanz einer SQL-Abfrage.

Containergesteuerter Entitätsmanager

Eine Möglichkeit, einen Entitätsmanager in einer Java EE-Umgebung zu verwenden, besteht in der Verwendung eines containergesteuerten Entitätsmanagers. In diesem Modus ist der Container für das Öffnen und Schließen des Entitätsmanagers zuständig und somit auch für den Lebenszyklus des Persistenzkontexts (in einer Art und Weise, die für die Anwendung transparent ist). Ein containergesteuerter Entitätsmanager ist auch für Transaktionsgrenzwerte zuständig.

Ein containergesteuerter Entitätsmanager kann in einer Anwendung durch eine Abhängigkeitsinjektion oder eine JNDI-Suche abgerufen werden. Der Container verwaltet Interaktionen zwischen der Entitätsmanagerfactory und der Anwendung transparent.

Für einen containergesteuerten Entitätsmanager muss eine JTA-Transaktion verwendet werden, weil der zugehörige Persistenzkontext mit der aktuellen JTA-Transaktion automatisch weitergegeben wird und die Entitätsmanagerreferenzen, die derselben Persistenzeinheit zugeordnet sind, Zugriff auf diesen Persistenzkontext innerhalb der JTA-Transaktion bieten. Diese Weitergabe des Persistenzkontexts durch den Java EE-Container bedeutet, dass die Anwendung keine Referenzen an die Entitätsmanagerinstanzen zwischen zwei Komponenten übergeben muss.

CMP-Kontexte (Container-managed Persistence) können mit einem von zwei verschiedenen Bereichen definiert werden:
  • Bereich "Transaktionspersistenz"
  • Bereich "Erweiterte Persistenz"

Anwendungsgesteuerter Entitätsmanager

Mit einem anwendungsgesteuerten Entitätsmanager können Sie den Entitätsmanager im Anwendungscode steuern.

Beachten Sie bei der Verwendung eines anwendungsgesteuerten Entitätsmanagers Folgendes:
  • Bei der Verwendung anwendungsgesteuerter Entitätsmanager wird der Persistenzkontext nicht an Anwendungskomponenten weitergegeben und der Lebenszyklus von Entitätsmanagerinstanzen wird von der Anwendung verwaltet. Dies bedeutet, dass der Persistenzkontext nicht mit der JTA-Transaktion in Entitätsmanagerinstanzen in einer bestimmten Persistenzeinheit weitergegeben wird.
  • Der Entitätsmanager und sein zugeordneter Persistenzkontext werden explizit von der Anwendung erstellt und gelöscht.
Dieser Typ von Entitätsmanager wird in zwei unterschiedlichen Szenarien verwendet:
  • In Java SE-Umgebungen, in denen Sie auf einen eigenständigen Persistenzkontext zugreifen können, der nicht mit der JTA-Transaktion in den Entitätsmanagerreferenzen für die angegebene Persistenzeinheit weitergegeben wird.
  • In einem Java EE-Container, wenn Sie in der Lage sein möchten, den Entitätsmanagerlebenszyklus sehr differenziert zu steuern.
Symbol das den Typ des Artikels anzeigt. Konzeptartikel
Nutzungsbedingungen für Information Center | Feedback

Symbol für Zeitmarke Letzte Aktualisierung: 29.04.2014

Dateiname: c_entity_manager.html