¿Qué es el contexto de persistencia?

109

Soy nuevo en el mundo de Java y JPA. Estaba estudiando JPA y encontré muchos términos nuevos como Entidad, persistencia. Mientras leía, no pude entender la definición exacta de contexto de persistencia .

¿Alguien puede explicarlo en términos simples y profanos? ¿Qué tiene que ver con los datos utilizados en el @Entity?

Por ejemplo, encuentro esta definición demasiado complicada de entender:

Un contexto de persistencia es un conjunto de entidades de modo que para cualquier identidad persistente hay una instancia de entidad única.

Amrit
fuente

Respuestas:

86

Un contexto de persistencia maneja un conjunto de entidades que contienen datos que se conservarán en algún almacén de persistencia (por ejemplo, una base de datos). En particular, el contexto es consciente de los diferentes estados que puede tener una entidad (por ejemplo, gestionada, separada) en relación tanto con el contexto como con el almacén de persistencia subyacente.

Aunque está relacionado con Hibernate (un proveedor de JPA), creo que estos enlaces son útiles:

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

En Java EE, normalmente se accede a un contexto de persistencia a través de un EntityManager.

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

Los diversos estados que puede tener una entidad y las transiciones entre estos se describen a continuación:

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

JamesB
fuente
hmmm, ahora tiene sentido. ¿Tiene una definición "simple" similar que indique la diferencia entre administradores de entidades administrados por contenedores y administrados por aplicaciones?
Amrit
4
contenedor vs aplicación básicamente dice dónde se crea Entity Manager: afuera en un contenedor, o adentro, en la aplicación.
uiron
66
  1. Las entidades son administradas por la instancia javax.persistence.EntityManager usando un contexto de persistencia.
  2. Cada instancia de EntityManager está asociada con un contexto de persistencia .
  3. Dentro del contexto de persistencia , se administran las instancias de entidad y su ciclo de vida.
  4. El contexto de persistencia define un ámbito en el que se crean, conservan y eliminan instancias de entidades particulares .
  5. Un contexto de persistencia es como un caché que contiene un conjunto de entidades persistentes , por lo que una vez que finaliza la transacción , todos los objetos persistentes se separan del contexto de persistencia de EntityManager y ya no se administran.
pritam kumar
fuente
1
Descubrí que EclipseLink no separa entidades después de que finaliza una transacción ...
Ray Hulha
La caché del contexto de persistencia administrada por el contenedor solo permanecerá durante la transacción. Las entidades leídas en una transacción se separarán después de la finalización de la transacción y deberán fusionarse para editarse en transacciones posteriores. EclipseLink . @RayHulha
pritam kumar
4
@pritamkumar, explicaste bien el concepto de contexto de persistencia. Solo agregaría que también existe la anotación javax.persistence.PersistenceContext, que se usa para inyectar un objeto EntityManager y establecer el alcance del objeto inyectado (por ejemplo, una transacción).
Paulo Merson
30

Tomado de esta página:

Aquí hay una hoja de trucos rápida del mundo JPA:

  • Una caché es una copia de los datos, es decir, copia que se extrae de la base de datos pero que vive fuera de ella.
  • Vaciar una caché es el acto de volver a poner datos modificados en la base de datos.
  • Un PersistenceContext es esencialmente un caché. También tiende a tener su propia conexión de base de datos no compartida.
  • Un EntityManager representa un PersistenceContext (y por lo tanto un Cache)
  • Un EntityManagerFactory crea un EntityManager (y por lo tanto un PersistenceContext / Cache)
Koray Tugay
fuente
¿Puede un PersisnteceContext tener instancias de EntityManager? ¿Y un Entity Manager puede tener algún PersistenceContext? ¿PersisntenceContext es solo una para todas las aplicaciones?
Roberto
7

Un contexto persistente representa las entidades que contienen datos y están calificadas para ser persistentes en algún almacenamiento persistente como una base de datos. Una vez que realizamos commituna transacción en una sesión que tiene estas entidades adjuntas, Hibernate vacía el contexto persistente y los cambios ( insertar / guardar, actualizar o eliminar ) persisten en el almacenamiento persistente.

QWERTY
fuente
7

Tanto la org.hibernate.SessionAPI como la javax.persistence.EntityManagerAPI representan un contexto para tratar con datos persistentes.

Este concepto se denomina contexto de persistencia . Los datos persistentes tienen un estado en relación tanto con un contexto de persistencia como con la base de datos subyacente.

PLP
fuente
5

"Un conjunto de instancias persistentes (de entidad) administradas por una instancia de administrador de entidades en un momento dado" se denomina contexto de persistencia.

La anotación JPA @Entity indica una entidad persistente.

Consulte la definición de JPA aquí

Dhanushka
fuente
4

En términos sencillos, podemos decir que el contexto de persistencia es un entorno en el que se gestionan las entidades, es decir, sincroniza "Entidad" con la base de datos.

AggarwalM
fuente
3

Si bien @pritam kumar ofrece una buena descripción general, el quinto punto no es cierto.

El contexto de persistencia puede ser de alcance de transacción: el contexto de persistencia 'vive' durante la duración de la transacción, o extendido: el contexto de persistencia abarca múltiples transacciones.

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

EntityManager de JPA y Session de Hibernate ofrecen un contexto de persistencia extendido.

este es mi diseño
fuente
Hola user2771889, Tienes razón, no mencioné el alcance extendido del contexto de persistencia. El quinto punto estaba relacionado con el contexto de persistencia del ámbito de la transacción.
Pritam Kumar
2

El contexto de persistencia es un entorno o caché donde las instancias de entidades (que son capaces de almacenar datos y, por lo tanto, tienen la capacidad de persistir en una base de datos) son administradas por Entity Manager . Sincroniza la entidad con la base de datos. Todos los objetos que tienen la anotación @Entity son capaces de ser persistido. @Entity no es más que una clase que nos ayuda a crear objetos para comunicarnos con la base de datos, y la forma en que los objetos se comunican es mediante métodos, y quien proporciona esos métodos es el Entity Manager.

neomatriz
fuente
1
¿En qué se diferencia esta respuesta de las respuestas existentes?
Akin Okegbile