2013-11-12 2 views
54

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

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

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

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

+0

@KorayTugay Вот новая ссылка http://docs.oracle.com/javaee/7/tutorial/persistence-intro003.htm#BNBQW, просто поиск ** Persistence Контекст ** –

ответ

54

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

Хотя 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

+0

хм, это имеет смысл сейчас. У вас есть аналогичное определение «Simple», которое говорит о различии между управляемыми Entity Managers, управляемыми контейнерами и приложениями? – Amrit

+3

контейнер против приложения просто в основном сообщает, где создается Entity Manager - снаружи в контейнере или внутри, в приложении. – uiron

3

Оба org.hibernate.Session API и javax. persistence.EntityManager API представляет собой контекст для работы с постоянными данными. Эта концепция называется контекстом персистентности. У постоянных данных есть состояние в отношении как контекста персистентности, так и базовой базы данных.

24
  1. Сущности управляются javax.persistence.EntityManager экземпляр используя контекст сохранения.
  2. Каждый экземплярEntityManager связан с сохранение контекст.
  3. В контексте контекст постоянства управляются экземпляры сущностей и их жизненный цикл .
  4. Постоянство контекст определяет объем , при которых создаются конкретные экземпляры сущностей, сохраняются, и удаляются.
  5. Контекст настойчивости, как кэша, который содержит набор постоянных сущностей, так как только сделки завершена, все постоянные объекты не отрывается от контекста настойчивости EntityManager в и нет более длительное управление.
+0

Я обнаружил, что EclipseLink не отделяет объекты после завершения транзакции ... –

+0

Кэш контекста, управляемый контейнером, останется только на время транзакции.Объекты, считанные в транзакции, будут отсоединены после завершения транзакции и потребуют объединения для редактирования в последующих транзакциях. [EclipseLink] (https://eclipse.org/eclipselink/documentation/2.4/concepts/cache001.htm). @RayHulha –

+1

@pritamkumar, вы хорошо объяснили концепцию контекста персистентности. Я бы добавил, что есть также аннотация javax.persistence.PersistenceContext, которая используется для ввода объекта EntityManager и определения области инжектируемого объекта (например, транзакции). –

1

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

Постоянство Контекст может быть либо транзакции Scoped-- Постоянство Контекст «живет» по длине сделки, или Extended-- Постоянство Контекст охватывает несколько операций.

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

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

+0

Привет, пользователь2771889. Вы правы. Я не упоминал расширенный контекст сохранения. 5-й пункт был просто связан с контекстом сохранения транзакций. –

2

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

6

this Взятые из страницы:

Вот быстрая шпаргалка мира JPA:

  • кэша копия данных, копию означая вытащил из но живущие за пределами базы данных.
  • Промывка кеша - это акт внесения измененных данных в базу данных.
  • ПерсистенцияКонтекст - это в основном кэш. Он также имеет собственное соединение без обмена данными.
  • EntityManager представляет собой PersistenceContext (и, следовательно, кэш)
  • EntityManagerFactory создает EntityManager (и, следовательно, PersistenceContext/Cache)
0

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

JPA @ Антитела по умолчанию обозначают объект, устойчивый к действию.

См JPA Definition here

Смежные вопросы