问题
I am new to the Java world and JPA. I was studying JPA and came across many new terms like Entity, persistence. While reading, I could not understand the exact definition for Persistence Context.
Can anyone explain it in simple laymen terms? What is it to do with the data used in the @Entity?
For example, I find this definition too complicated to understand:
A persistence context is a set of entities such that for any persistent identity there is a unique entity instance.
回答1:
A persistence context handles a set of entities which hold data to be persisted in some persistence store (e.g. a database). In particular, the context is aware of the different states an entity can have (e.g. managed, detached) in relation to both the context and the underlying persistence store.
Although Hibernate-related (a JPA provider), I think these links are useful:
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
In Java EE, a persistence context is normally accessed via an EntityManager.
http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html
The various states an entity can have and the transitions between these are described below:
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
回答2:
- Entities are managed by javax.persistence.EntityManager instance using persistence context.
- Each EntityManager instance is associated with a persistence context.
- Within the persistence context, the entity instances and their lifecycle are managed.
- Persistence context defines a scope under which particular entity instances are created, persisted, and removed.
- A persistence context is like a cache which contains a set of persistent entities , So once the transaction is finished, all persistent objects are detached from the EntityManager's persistence context and are no longer managed.
回答3:
Taken from this page:
Here's a quick cheat sheet of the JPA world:
- A Cache is a copy of data, copy meaning pulled from but living outside the database.
- Flushing a Cache is the act of putting modified data back into the database.
- A PersistenceContext is essentially a Cache. It also tends to have it's own non-shared database connection.
- An EntityManager represents a PersistenceContext (and therefore a Cache)
- An EntityManagerFactory creates an EntityManager (and therefore a PersistenceContext/Cache)
回答4:
Both the org.hibernate.Session API and javax.persistence.EntityManager API represent a context for dealing with persistent data. This concept is called a persistence context. Persistent data has a state in relation to both a persistence context and the underlying database.
回答5:
A persistent context represents the entities which hold data and are qualified to be persisted in some persistent storage like a database. Once we commit a transaction under a session which has these entities attached with, Hibernate flushes the persistent context and changes(insert/save, update or delete) on them are persisted in the persistent storage.
回答6:
"A set of persist-able (entity) instances managed by an entity manager instance at a given time" is called persistence context.
JPA @Entity annotation indicates a persist-able entity.
Refer JPA Definition here
回答7:
While @pritam kumar gives a good overview the 5th point is not true.
Persistence Context can be either Transaction Scoped-- the Persistence Context 'lives' for the length of the transaction, or Extended-- the Persistence Context spans multiple transactions.
https://blogs.oracle.com/carolmcdonald/entry/jpa_caching
JPA's EntityManager and Hibernate's Session offer an extended Persistence Context.
回答8:
In layman terms we can say that Persistence Context is an environment where entities are managed, i.e it syncs "Entity" with the database.
来源:https://stackoverflow.com/questions/19930152/what-is-persistence-context