Gestor de entidades

La interfaz EntityManager es una API que gestiona el ciclo de vida de una instancia de entidades.

Las entidades no pueden persistir por sí mismas en la base de datos relacional; las anotaciones sólo se utilizan para declarar un POJO como una entidad o para definir su correlación y sus relaciones con las tablas correspondientes en la base de datos relacional.

En JPA, la interfaz EntityManager se utiliza para permitir que las aplicaciones gestionen y busquen entidades en la base de datos relacional.

EntityManager es una API que gestiona el ciclo de vida de las instancias de entidades. Un objeto EntityManager gestiona un conjunto de entidades que se definen mediante una unidad de persistencia. Cada instancia de EntityManager está asociada a un contexto de persistencia. Un contexto de persistencia define el ámbito bajo el que las instancias de entidad se crean, persisten y eliminan a través de las API dispuestas por EntityManager . De alguna forma, un contexto de persistencia es parecido conceptualmente a un contexto de transacción.

El gestor de entidades realiza un seguimiento de todos los objetos de entidades de un contexto de persistencia para los cambios y actualizaciones que se han realizado, y lleva estos cambios a la base de datos. Una vez cerrado un contexto de persistencia, todas las instancias de objeto de entidad gestionadas se despegan del contexto de persistencia y del gestor de entidad asociado y dejan de estar gestionadas. Una vez despegado un objeto de un contexto de persistencia, ya no se puede gestionar a través de un gestor de entidad y los cambios realizados en esta instancia de objeto no se sincronizarán con la base de datos.

Entidades gestionadas y no gestionadas

Una instancia de objeto de entidad está gestionada (adjunta) por un gestor de entidad o no gestionada (despegada).

Cuando se adjunta una entidad a un gestor de entidades, el gestor supervisa los cambios realizados en la entidad y la sincroniza con la base de datos siempre que el gestor de entidad decida desechar su estado.

Cuando se despega una entidad y por lo tanto deja de estar asociada a un contexto de persistencia, deja de estar gestionada y el gestor de entidad no hace un seguimiento de sus cambios de estado.

Las instancias de entidad dejan de estar gestionadas y se despegan cuando finaliza un ámbito de transacción o el contexto de persistencia ampliado. Una consecuencia importante de este hecho es que las entidades despegadas pueden serializarse y enviarse a través de la red a un cliente remoto. El cliente puede hacer cambios de forma remota en estas instancias de objeto serializadas y enviarlas de vuelta al servidor para que se fusionen y se sincronicen con la base de datos.

Nota: Este comportamiento es diferente del modelo de entidad de EJB 2.1, donde las entidades siempre las gestiona el contenedor. Puesto que en EJB 3.0 trabaja con entidades que son POJO, esto puede simplificar el diseño de las aplicaciones Java™ EE ya que no es necesario utilizar patrones como por ejemplo objetos de transferencia de datos (DTO) entre la capa de lógica de negocio (beans de sesión) y la capa de persistencia.

Operaciones de gestor de entidad

Las operaciones principales que puede realizar un gestor de entidad:
Tabla 1. Operaciones de gestor de entidad. La tabla describe las operaciones del gestor de entidades.
Operación Descripción
persist
  • Insertar una instancia de entidad nueva en la base de datos.
  • Guardar el estado persistente de la entidad y cualesquiera referencias de relación poseídas.
  • La instancia de entidad queda gestionada.
find Obtener una instancia de entidad gestionada con una identidad persistente dada (clave primaria), devolver nulo si no se encuentra.
remove Suprimir una entidad gestionada con la identidad persistente dada de la base de datos.
merge El estado de una entidad despegada se fusiona en una copia gestionada de la entidad despegada. La entidad gestionada devuelta tiene una identidad Java diferente de la identidad despegada.
refresh Volver a cargar el estado de entidad de la base de datos.
lock Establecer la modalidad de bloqueo para un objeto de entidades que se halla en el contexto de persistencia.
flush Forzar sincronización con base de datos.
contains Determinar si una entidad está contenida en el contexto de persistencia actual.
createQuery Crear una instancia de consulta mediante el Lenguaje de consulta de persistencia Java dinámico.
createNamedQuery Crear una instancia de una consulta predefinida
createNativeQuery Crear una instancia de una consulta SQL.

Gestor de entidades gestionado por contenedor

Una forma de utilizar un gestor de entidades en un entorno Java EE es con un gestor de entidades gestionado por contenedor. En esta modalidad, el contenedor es responsable de la apertura y el cierre del gestor de entidades y, por lo tanto, del ciclo de vida del contexto de persistencia (de una forma transparente para la aplicación). Un gestor de entidades gestionado por contenedor también es responsable de límites de transacción.

Un gestor de entidades gestionado por contenedor se obtiene en una aplicación a través de la inyección de dependencias o través de la búsqueda JNDI y el contenedor gestiona la interacción con la fábrica de gestores de entidad de forma transparente para la aplicación.

Un gestor de entidades gestionado por contenedor requiere el uso de una transacción JTA, porque su contexto de persistencia se propaga automáticamente con la transacción JTA actual, y las referencias del gestor de entidades que se correlacionan con la misma unidad de persistencia proporcionan acceso a este mismo contexto de persistencia dentro de la transacción JTA. Esta propagación de contexto de persistencia por el contenedor Java EE significa que la aplicación no debe pasar referencias a las instancias de gestor de entidad de un componente a otro.

Los contextos de persistencia gestionados por contenedor pueden definirse para disponer uno de los dos ámbitos diferentes:
  • Ámbito de persistencia de transacción
  • Ámbito de persistencia ampliado

Gestor de entidades gestionado por aplicación

Mediante un gestor de entidades gestionado por aplicación puede controlar todo el gestor en el código de aplicación.

Cuando utilice un gestor de entidad gestionado por aplicación, fíjese en lo siguiente:
  • Con los gestores de entidades gestionados por aplicación no se propaga el contexto de persistencia a los componentes de la aplicación y el ciclo de vida de las instancias del gestor de entidades las gestiona la aplicación. Esto significa que el contexto de persistencia no se propaga con la transacción JTA entre instancias de gestor de entidad en una unidad de persistencia determinada.
  • La aplicación crea y destruye explícitamente el gestor de entidad y su contexto de persistencia asociado.
Este tipo de gestor de entidades se utiliza en dos escenarios diferentes:
  • En entornos Java SE en los que desea acceder a un contexto de persistencia autónomo y no propagado conjuntamente con la transacción JTA entre las referencias de gestor de entidad para la unidad de persistencia dada.
  • En un contenedor Java EE, si desea obtener un control muy preciso sobre el ciclo de vida del gestor de entidades.
Icono que indica el tipo de tema Tema de conceptos
Términos y condiciones para centros de información | Comentarios

Icono de indicación de fecha y hora Última actualización: 22 de abril de 2014

Nombre de archivo: c_entity_manager.html