Что такое контекст сохранения?

109

Я новичок в мире Java и JPA. Я изучал JPA и наткнулся на много новых терминов, таких как сущность, настойчивость. Читая, я не мог понять точное определение контекста постоянства .

Может ли кто-нибудь объяснить это простыми словами? Что делать с данными, используемыми в @Entity?

Например, я считаю это определение слишком сложным для понимания:

Контекст персистентности - это набор сущностей, так что для любой постоянной идентичности существует уникальный экземпляр сущности.

Амрит
источник

Ответы:

86

Контекст постоянства обрабатывает набор сущностей, которые содержат данные, которые должны быть сохранены в некотором хранилище постоянства (например, в базе данных). В частности, контекст осведомлен о различных состояниях, которые может иметь объект (например, управляемый, отсоединенный) по отношению как к контексту, так и к базовому хранилищу постоянства.

Хотя эти ссылки связаны с Hibernate (поставщик 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 не отсоединяет объекты после завершения транзакции ...
Рэй Хульха,
Кэш контекста постоянного хранения, управляемого контейнером, будет оставаться только на время транзакции. Сущности, считываемые в транзакции, будут отсоединены после завершения транзакции, и их потребуется объединить для редактирования в последующих транзакциях. EclipseLink . @RayHulha
притам кумар
4
@pritamkumar, вы хорошо объяснили концепцию контекста постоянства. Я бы просто добавил, что есть также аннотация javax.persistence.PersistenceContext, которая используется для внедрения объекта EntityManager и установления области действия внедренного объекта (например, транзакции).
Пауло Мерсон,
30

Взято с этой страницы:

Вот краткая шпаргалка по миру JPA:

  • Кэш - это копия данных, то есть копия, извлеченная из базы данных, но живущая вне ее.
  • Очистка кеша - это процесс помещения измененных данных обратно в базу данных.
  • По сути, PersistenceContext - это кэш. Он также имеет тенденцию иметь собственное соединение с базой данных без совместного использования.
  • EntityManager представляет PersistenceContext (и, следовательно, кеш)
  • EntityManagerFactory создает EntityManager (и, следовательно, PersistenceContext / Cache)
Корай Тугай
источник
может ли один PersisnteceContext иметь какие-либо экземпляры EntityManager? И может ли один Entity Manager иметь какой-либо PersistenceContext? PersisntenceContext только одно для всех приложений?
Роберто
7

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

qwerty
источник
7

И org.hibernate.SessionAPI, и javax.persistence.EntityManagerAPI представляют собой контекст для работы с постоянными данными.

Эта концепция называется контекстом постоянства . Постоянные данные имеют состояние по отношению как к контексту постоянства, так и к базовой базе данных.

PLP
источник
5

«Набор устойчивых экземпляров (сущностей), управляемых экземпляром диспетчера сущностей в заданное время», называется контекстом постоянства.

Аннотация JPA @Entity указывает на устойчивую сущность.

См. Определение JPA здесь

Дханушка
источник
4

С точки зрения непрофессионала мы можем сказать, что контекст постоянства - это среда, в которой объекты управляются, то есть он синхронизирует "объект" с базой данных.

AggarwalM
источник
3

Хотя @pritam kumar дает хороший обзор, 5-й пункт не соответствует действительности.

Контекст персистентности может быть либо с ограниченным объемом транзакции - контекст постоянства «живет» на протяжении всей транзакции, либо с расширенным - контекст постоянства охватывает несколько транзакций.

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

EntityManager и Hibernate Session от JPA предлагают расширенный контекст сохранения.

это
источник
Привет, user2771889, Вы правы, я не упомянул расширенную область контекста постоянства. Пятый пункт был связан только с контекстом персистентности в области транзакции.
притам кумар 03
2

Контекст персистентности - это среда или кеш, в которой экземпляры сущностей (которые могут хранить данные и, следовательно, иметь возможность сохраняться в базе данных) управляются Entity Manager. Он синхронизирует сущность с базой данных. Все объекты, имеющие аннотацию @Entity , способны упорства. @Entity - это не что иное, как класс, который помогает нам создавать объекты для связи с базой данных. Объекты взаимодействуют с помощью методов. Эти методы предоставляет Entity Manager.

неоматрица
источник
1
Чем этот ответ отличается от существующих ответов?
Акин Окегбиле,