Co to jest kontekst trwałości?

109

Jestem nowy w świecie Java i JPA. Studiowałem JPA i natknąłem się na wiele nowych terminów, takich jak Entity, wytrwałość. Czytając, nie mogłem zrozumieć dokładnej definicji kontekstu trwałości .

Czy ktoś może to wyjaśnić prostymi, laickimi słowami? Co to ma wspólnego z danymi używanymi w @Entity?

Na przykład uważam tę definicję za zbyt skomplikowaną, aby ją zrozumieć:

Kontekst trwałości to zestaw jednostek, tak że dla każdej trwałej tożsamości istnieje unikalne wystąpienie jednostki.

Amrit
źródło

Odpowiedzi:

86

Kontekst trwałości obsługuje zestaw jednostek, które przechowują dane w celu utrwalenia w pewnym magazynie trwałości (np. Bazie danych). W szczególności kontekst jest świadomy różnych stanów, jakie jednostka może mieć (np. Zarządzana, odłączana) w odniesieniu zarówno do kontekstu, jak i bazowego magazynu trwałości.

Chociaż związane z Hibernate (dostawca JPA), myślę, że te linki są przydatne:

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

W Java EE dostęp do kontekstu trwałości jest zwykle uzyskiwany za pośrednictwem elementu EntityManager.

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

Różne stany, które jednostka może mieć, oraz przejścia między nimi opisano poniżej:

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
źródło
hmmm, teraz ma to sens. Czy masz podobną „prostą” definicję, która mówi o różnicy między menedżerami jednostek zarządzanymi przez kontener a menedżerami jednostek zarządzanymi przez aplikację?
Amrit,
4
Kontener vs aplikacja po prostu mówi, gdzie jest tworzony Entity Manager - na zewnątrz w kontenerze lub wewnątrz aplikacji.
uiron
66
  1. Jednostkami zarządza instancja javax.persistence.EntityManager przy użyciu kontekstu trwałości.
  2. Każdy EntityManager przypadek wiąże się z w związku z trwałością .
  3. W kontekście trwałości zarządza się wystąpieniami jednostek i ich cyklem życia.
  4. Kontekst trwałości definiuje zakres, w którym są tworzone, utrwalane i usuwane określone wystąpienia jednostki.
  5. Kontekst wytrwałość jest jak pamięć podręczna , która zawiera zbiór podmiotów utrzymujących , więc gdy transakcja zostanie zakończona , wszystkie trwałe obiekty są oderwane od kontekstu utrwalania EntityManager użytkownika i są już nie udało.
pritam kumar
źródło
1
Odkryłem, że EclipseLink nie
odłącza
Pamięć podręczna kontekstu trwałości zarządzanego przez kontener pozostanie tylko na czas trwania transakcji. Podmioty odczytywane w transakcji zostaną odłączone po zakończeniu transakcji i będą wymagały połączenia w celu edycji w kolejnych transakcjach. EclipseLink . @RayHulha
pritam kumar
4
@pritamkumar, dobrze wyjaśniłeś pojęcie kontekstu trwałości. Dodam tylko, że istnieje również adnotacja javax.persistence.PersistenceContext, która służy do wstrzyknięcia obiektu EntityManager i ustalenia zakresu wstrzykniętego obiektu (np. Transakcji).
Paulo Merson
30

Zaczerpnięte z tej strony:

Oto krótka ściągawka ze świata JPA:

  • Pamięć podręczna to kopia danych, co oznacza kopię, która została pobrana z bazy danych, ale żyje poza nią.
  • Opróżnianie pamięci podręcznej to czynność polegająca na umieszczeniu zmodyfikowanych danych z powrotem w bazie danych.
  • PersistenceContext to zasadniczo pamięć podręczna. Zwykle ma również własne, niewspółużytkowane połączenie z bazą danych.
  • EntityManager reprezentuje PersistenceContext (a tym samym pamięć podręczną)
  • EntityManagerFactory tworzy EntityManager (a zatem PersistenceContext / Cache)
Koray Tugay
źródło
czy jeden PersisnteceContext może mieć dowolne instancje EntityManager? I czy jeden Entity Manager może mieć dowolny PersistenceContext? PersisntenceContext jest tylko jeden dla wszystkich aplikacji?
Roberto
7

Trwałe kontekst reprezentuje podmioty, które posiadają dane i są kwalifikacje, aby być utrwalone w pewnym pamięci trwałej jak bazy danych. Po commitdokonaniu transakcji w ramach sesji, do której są dołączone te jednostki, Hibernate opróżnia trwały kontekst, a zmiany ( wstawianie / zapisywanie, aktualizowanie lub usuwanie ) w nich są utrwalane w pamięci trwałej.

qwerty
źródło
7

Zarówno org.hibernate.SessionAPI, jak i javax.persistence.EntityManagerAPI stanowią kontekst do radzenia sobie z trwałymi danymi.

Pojęcie to nazywa się kontekstem trwałości . Trwałe dane mają stan związany zarówno z kontekstem trwałości, jak i bazową bazą danych.

PLP
źródło
5

„Zestaw trwałych instancji (jednostek) zarządzanych w danym momencie przez instancję menedżera jednostek” jest nazywany kontekstem trwałości.

Adnotacja JPA @Entity wskazuje na trwałą jednostkę.

Zobacz definicję JPA tutaj

Dhanushka
źródło
4

Mówiąc prościej można powiedzieć, że Persistence Context to środowisko, w którym zarządza się encjami, tj. Synchronizuje „Entity” z bazą danych.

AggarwalM
źródło
3

Chociaż @pritam kumar daje dobry przegląd, piąty punkt nie jest prawdziwy.

Kontekst trwałości może mieć zakres transakcji - kontekst trwałości „żyje” przez długość transakcji lub rozszerzony - kontekst trwałości obejmuje wiele transakcji.

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

EntityManager i Hibernate Session JPA oferują rozszerzony kontekst trwałości.

to mój projekt
źródło
Cześć user2771889, Masz rację Nie wspomniałem o rozszerzonym zakresie kontekstu trwałości. Piąty punkt dotyczył właśnie kontekstu trwałości w zakresie transakcji.
pritam kumar
2

Kontekst trwałości to środowisko lub pamięć podręczna, w którym instancje jednostek (które mogą przechowywać dane, a tym samym mogą być utrwalane w bazie danych) są zarządzane przez Entity Manager . Synchronizuje jednostkę z bazą danych. Wszystkie obiekty z adnotacją @Entity są w stanie bycia upartym. @Entity to nic innego jak klasa, która pomaga nam tworzyć obiekty w celu komunikowania się z bazą danych, a sposób, w jaki obiekty komunikują się przy użyciu metod, a dostawcą tych metod jest Entity Manager.

neomatrix
źródło
1
Czym ta odpowiedź różni się od istniejących odpowiedzi?
Akin Okegbile