What is Persistence Context?
JavaJpaOrmPersistenceJava Problem Overview
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.
Java Solutions
Solution 1 - Java
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
https://vladmihalcea.com/wp-content/uploads/2014/07/jpaentitystates.png
Solution 2 - Java
- 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.
Solution 3 - Java
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)
Solution 4 - Java
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.
Solution 5 - Java
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.
Solution 6 - Java
Persistence Context is an environment or cache where entity instances(which are capable of holding data and thereby having the ability to be persisted in a database) are managed by Entity Manager.It syncs the entity with database.All objects having @Entity annotation are capable of being persisted. @Entity is nothing but a class which helps us create objects in order to communicate with the database.And the way the objects communicate is using methods.And who supplies those methods is the Entity Manager.
Solution 7 - Java
"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
Solution 8 - Java
In layman terms we can say that Persistence Context is an environment where entities are managed, i.e it syncs "Entity" with the database.
Solution 9 - Java
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.