Samstag, 17. März 2012

JPA Lebenszyklus Transient Persistent Detached

Wie sieht ein Lebenszyklus einer JPA entity aus?
Wenn eine Entität definiert wurde, später instaniiert wird, dann beginnt der Lebenszyklus einer
Entität. Der Lebenszyklus eine Entität endet mit einem remove() bzw. einem detach(siehe weiter unten).
Eine Entität kennt nicht den Zustand seines Lebenszyklus, d.h. sie kann hierzu nicht abgefragt werden.

Welche Stadien durchläuft eine JPA in ihrem Leben?
  • transient
Wurde eine Klasse mit @Entity deklariert, dann handelt es sich bei dieser Klasse um eine Entität, d.h. sie wir im Persistenzkontext verwendet und wird vom EntityManager verwaltet.
Wird diese Klasse instaniiert, dann befindet sie sich im transienten Zustand, d.h. es ist ein einfaches Java-Objekt, dass nicht mit der Datenbank synchronisiert wird.

  • persistent
Wird auf dieser Entität nun mittels des EntityManager persist() - aufgerufen, dann wird die Entität in den Persistenzkontext aufgenommen, d.h. die Entität wurde mit einem/dem EntityManager verbunden.
Die Entität wird nun bei jedem Transaktionsende (commit() oder flush()) mit der Datenbank synchronisiert.

  • detached
Wird eine Entität explizit aus dem Persistenzkontext genommen, durch detach() oder der EntityManager geschlossen via close(), dann wird die Verbindung(siehe persistent()) wieder aufgelöst. D.h. die Entität wird nun nicht mehr mit der Datenbank synchronisiert, wenn z.B. die Transaktionen zu Ende ist.

Eine detached - Entität kann mit merge()-Aufruf wieder in den Persistenzkontext aufgenommen werden.
Eine persistente Entität kann mittels remove()-Aufruf in den Zustand transient überführt werden, die Daten der Entität werden in der Datenbank gelöscht.

Keine Kommentare:

Kommentar veröffentlichen