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.
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.
Operación | Descripción |
---|---|
persist |
|
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. |
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.
Mediante un gestor de entidades gestionado por aplicación puede controlar todo el gestor en el código de aplicación.