Що таке стійкість контексту?


109

Я новачок у світі Java та JPA. Я вивчав JPA і натрапив на багато нових термінів, таких як Entity, наполегливість. Читаючи, я не міг зрозуміти точного визначення контексту стійкості .

Чи може хтось пояснити це простими мирянами? Що це стосується даних, що використовуються у програмі @Entity?

Наприклад, я вважаю це визначення занадто складним, щоб зрозуміти:

Контекст стійкості - це сукупність сутностей, така що для будь-якої стійкої ідентичності існує унікальний екземпляр сутності.

Відповіді:


86

Контекст стійкості обробляє набір об'єктів, які зберігають дані, що зберігаються в деякому сховищі (наприклад, база даних). Зокрема, контекст усвідомлює різні стани, які може мати (наприклад, керована, відірвана) стосовно як контексту, так і основного запасу стійкості.

Незважаючи на те, що пов’язані зі сплячкою (постачальник JPA), я думаю, що ці посилання корисні:

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

У Java EE до контексту стійкості зазвичай доступний через EntityManager.

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

Різні стани, які може мати сутність, і переходи між ними описані нижче:

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


хммм, це вже має сенс. Чи є у вас подібне "просте" визначення, яке говорить про різницю між керованими контейнерами та керованими додатками менеджерами суб'єктів?
Амрит

4
контейнер проти програми просто вказує, де створюється Entity Manager - зовні в контейнері або всередині додатка.
uiron

66
  1. Об'єкти управляються javax.persistence.EntityManager , наприклад , використовуючи контекст збереження.
  2. Кожен EntityManager екземпляр пов'язаний з в контексті збереження стану .
  3. У контексті стійкості керуються екземплярами сутності та їх життєвим циклом.
  4. Контекст стійкості визначає сферу, в якій конкретні екземпляри сутності створюються, зберігаються та вилучаються.
  5. Контекст збереження подібний кешу , який містить набір постійних сутностей , так як тільки угода завершена , всі постійні об'єкти відокремлюються від контексту інерційності EntityManager в і не більше не вдалися.

1
Я виявив, що EclipseLink не від'єднує юридичні особи після завершення транзакції ...
Ray Hulha

Кеш контексту стійкості керованого контейнера зберігатиметься лише протягом тривалості транзакції. Суб'єкти, прочитані в транзакції, будуть від'єднані після завершення транзакції, і вони потребують об'єднання для редагування в наступних транзакціях. EclipseLink . @RayHulha
pritam kumar

4
@pritamkumar, ви добре пояснили концепцію постійного контексту. Я просто додам, що є також примітка javax.persistence.PersistenceContext, яка використовується для введення об’єкта EntityManager та встановлення сфери введеного об'єкта (наприклад, транзакції).
Пауло Мерсон

30

Взято з цього сторінки:

Ось короткий шпаргалка світу JPA:

  • Кеш - це копія даних, сенс копіювання, витягнутий із бази даних, але нею.
  • Промивання кешу - це акт повернення змінених даних у базу даних.
  • PersistentContext - це по суті кеш-пам'ять. Він також має тенденцію мати власне неподілене підключення до бази даних.
  • EntityManager являє собою PersistentContext (і, отже, кеш)
  • EntityManagerFactory створює EntityManager (і, отже, PersistenceContext / Cache)

Чи може один PersisnteceContext мати будь-які екземпляри EntityManager? І чи може один менеджер Entity мати будь-який PersistentContext? PersisntenceContext - лише один для всіх застосувань?
Роберто

7

Наполегливий контекст являє собою об'єкти , які містять інформацію і кваліфіковані , щоб бути збережені в деякій постійній пам'яті , як бази даних. Після того, як ми commitздійснюємо трансакцію під час сеансу, до якої приєднані ці об'єкти, Hibernate очищує стійкий контекст, і зміни ( вставляти / зберігати, оновлювати чи видаляти ) на них зберігаються в постійному сховищі.


7

І org.hibernate.SessionAPI, і javax.persistence.EntityManagerAPI являють собою контекст для роботи зі стійкими даними.

Ця концепція називається контекстом стійкості . Постійні дані мають стан по відношенню як до контексту постійності, так і до базової бази даних.


5

"Набір стійких (сутні) екземплярів, якими керується екземпляр менеджера суб'єкта господарювання в даний момент часу", називається контекстом стійкості.

Анотація JPA @Entity вказує на існування.

Визначення JPA див. Тут


4

Простіше кажучи, ми можемо сказати, що "Персистентний контекст" - це середовище, в якому керуються сутностями, тобто він синхронізує "Сутність" з базою даних.


3

Хоча @pritam kumar дає хороший огляд, 5-та точка не відповідає дійсності.

Контекст стійкості може бути або охопленим транзакцією - контекст стійкості "живе" протягом тривалості транзакції, або розширений - контекст стійкості охоплює кілька транзакцій.

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

EntityManager JPA та сесія зимувальної роботи пропонують розширений постійний контекст.


Привіт, користувач2771889, Ви праві, я не згадав про розширений діапазон стійкості. П'ятий пункт якраз стосувався контексту стійкості, охопленого транзакціями.
pritam kumar

2

Персистентний контекст - це середовище або кеш, де екземпляри сутності (які здатні зберігати дані і, таким чином, мати можливість зберігатись у базі даних) управляються Entity Manager . Він синхронізує об'єкт із базою даних. Усі об'єкти, що мають анотацію @Entity , здатні існування. @Entity - це не що інше, як клас, який допомагає нам створювати об’єкти для спілкування з базою даних. А спосіб, яким обмінюються об'єкти, використовує методи.


1
Чим ця відповідь відрізняється від існуючих відповідей?
Akin Okegbile
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.