¿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.

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


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.

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)

¿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.


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.


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í


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.


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.


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.


1
¿En qué se diferencia esta respuesta de las respuestas existentes?
Akin Okegbile
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.