Was ist Persistenzkontext?

109

Ich bin neu in der Java-Welt und JPA. Ich habe JPA studiert und bin auf viele neue Begriffe wie Entität und Beharrlichkeit gestoßen. Beim Lesen konnte ich die genaue Definition für den Persistenzkontext nicht verstehen .

Kann es jemand in einfachen Laienbegriffen erklären? Was ist mit den in der verwendeten Daten zu tun @Entity?

Zum Beispiel finde ich diese Definition zu kompliziert, um sie zu verstehen:

Ein Persistenzkontext besteht aus einer Reihe von Entitäten, sodass für jede persistente Identität eine eindeutige Entitätsinstanz vorhanden ist.

Amrit
quelle

Antworten:

86

Ein Persistenzkontext behandelt eine Reihe von Entitäten, die Daten enthalten, die in einem Persistenzspeicher (z. B. einer Datenbank) persistiert werden sollen. Insbesondere ist dem Kontext bekannt, welche unterschiedlichen Zustände eine Entität in Bezug auf den Kontext und den zugrunde liegenden Persistenzspeicher haben kann (z. B. verwaltet, getrennt).

Obwohl Hibernate-bezogen (ein JPA-Anbieter), halte ich diese Links für nützlich:

http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch03.html

http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/architecture.html

In Java EE wird normalerweise über einen EntityManager auf einen Persistenzkontext zugegriffen.

http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html

Die verschiedenen Zustände, die eine Entität haben kann, und die Übergänge zwischen diesen werden nachstehend beschrieben:

http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/objectstate.html

http://gerrydevstory.com/wp-content/uploads/2012/05/jpa-state-transtition.png

JamesB
quelle
hmmm, das macht jetzt Sinn. Haben Sie eine ähnliche "einfache" Definition, die den Unterschied zwischen containergesteuerten und anwendungsverwalteten Entitätsmanagern erkennt?
Amrit
4
container vs application gibt im Grunde nur an, wo Entity Manager erstellt wird - außen in einem Container oder innen in der Anwendung.
Uiron
66
  1. Entitäten werden von der Instanz javax.persistence.EntityManager unter Verwendung des Persistenzkontexts verwaltet.
  2. Jede EntityManager- Instanz ist einem Persistenzkontext zugeordnet .
  3. Im Persistenzkontext werden die Entitätsinstanzen und ihr Lebenszyklus verwaltet.
  4. Der Persistenzkontext definiert einen Bereich, in dem bestimmte Entitätsinstanzen erstellt, beibehalten und entfernt werden.
  5. Ein Persistenzkontext ähnelt einem Cache, der eine Reihe persistenter Entitäten enthält. Sobald die Transaktion abgeschlossen ist , werden alle persistenten Objekte vom Persistenzkontext des EntityManager getrennt und nicht mehr verwaltet.
Pritam Kumar
quelle
1
Ich fand, dass EclipseLink keine Entitäten
trennt
Der Cache des vom Container verwalteten Persistenzkontexts bleibt nur für die Dauer der Transaktion erhalten. In eine Transaktion eingelesene Entitäten werden nach Abschluss der Transaktion getrennt und müssen zusammengeführt werden, um in nachfolgenden Transaktionen bearbeitet zu werden. EclipseLink . @ RayHulha
Pritam Kumar
4
@pritamkumar, Sie haben das Konzept eines Persistenzkontexts gut erklärt. Ich möchte nur hinzufügen, dass es auch die Annotation javax.persistence.PersistenceContext gibt, mit der ein EntityManager-Objekt eingefügt und der Bereich des injizierten Objekts (z. B. eine Transaktion) festgelegt wird.
Paulo Merson
30

Daraus entnommen Seite:

Hier ist ein kurzer Spickzettel der JPA-Welt:

  • Ein Cache ist eine Kopie von Daten, dh eine Kopie, die aus der Datenbank stammt, aber außerhalb der Datenbank lebt.
  • Beim Leeren eines Cache werden geänderte Daten wieder in die Datenbank gestellt.
  • Ein PersistenceContext ist im Wesentlichen ein Cache. Es hat auch tendenziell eine eigene nicht gemeinsam genutzte Datenbankverbindung.
  • Ein EntityManager repräsentiert einen PersistenceContext (und damit einen Cache).
  • Eine EntityManagerFactory erstellt einen EntityManager (und damit einen PersistenceContext / Cache).
Koray Tugay
quelle
Kann ein PersisnteceContext EntityManager-Instanzen haben? Und kann ein Entity Manager einen PersistenceContext haben? PersisntenceContext ist nur einer für alle Anwendungen?
Roberto
7

Ein persistenter Kontext stellt die Entitäten dar, die Daten enthalten und für die Persistenz in einem persistenten Speicher wie einer Datenbank qualifiziert sind. Sobald wir commiteine Transaktion unter einer Sitzung haben, mit der diese Entitäten verknüpft sind , löscht Hibernate den persistenten Kontext und Änderungen ( Einfügen / Speichern, Aktualisieren oder Löschen ) an ihnen werden im persistenten Speicher beibehalten.

QWERTY
quelle
7

Sowohl die org.hibernate.SessionAPI als auch die javax.persistence.EntityManagerAPI stellen einen Kontext für den Umgang mit persistenten Daten dar.

Dieses Konzept wird als Persistenzkontext bezeichnet . Persistente Daten haben einen Status in Bezug auf einen Persistenzkontext und die zugrunde liegende Datenbank.

PLP
quelle
5

"Eine Reihe von persistenten (Entitäts-) Instanzen, die zu einem bestimmten Zeitpunkt von einer Entitätsmanagerinstanz verwaltet werden" wird als Persistenzkontext bezeichnet.

Die Annotation JPA @Entity gibt eine dauerhafte Entität an.

Siehe JPA- Definition hier

Dhanushka
quelle
4

Laien können sagen, dass der Persistenzkontext eine Umgebung ist, in der Entitäten verwaltet werden, dh "Entität" mit der Datenbank synchronisiert wird.

AggarwalM
quelle
3

Während @pritam kumar einen guten Überblick gibt, ist der 5. Punkt nicht wahr.

Der Persistenzkontext kann entweder transaktionsbezogen sein - der Persistenzkontext "lebt" für die Länge der Transaktion oder erweitert - der Persistenzkontext umfasst mehrere Transaktionen.

https://blogs.oracle.com/carolmcdonald/entry/jpa_caching

Der EntityManager und die Hibernate-Sitzung von JPA bieten einen erweiterten Persistenzkontext.

Das ist mein Design
quelle
Hallo Benutzer2771889, Sie haben Recht, ich habe den erweiterten Bereich des Persistenzkontexts nicht erwähnt. Der fünfte Punkt bezog sich nur auf den Persistenzkontext mit Transaktionsbereich.
Pritam Kumar
2

Persistenzkontext ist eine Umgebung oder ein Cache, in der Entitätsinstanzen (die Daten speichern können und somit in einer Datenbank beibehalten werden können ) von Entity Manager verwaltet werden. Er synchronisiert die Entität mit der Datenbank. Alle Objekte mit @ Entity- Annotation sind in der Lage beharrlich zu sein. @Entity ist nichts anderes als eine Klasse, mit deren Hilfe wir Objekte erstellen können, um mit der Datenbank zu kommunizieren. Die Art und Weise, wie die Objekte kommunizieren, verwendet Methoden. Und wer diese Methoden bereitstellt, ist der Entity Manager.

Neomatrix
quelle
1
Wie unterscheidet sich diese Antwort von den vorhandenen Antworten?
Akin Okegbile