17 - Aprende sobre el uso del Persist, Merge, Remove y Query en Java
Como usar el Persist, Merge, Remove y Query para Insertar, Modificar, Eliminar y Buscar en Java con MySQL usando JPA Eclipselink.
Una parte esencial de utilizar JPA es saber utilizar las operaciones básicas, operaciones mediante las cuales es posible consultar, persistir, actualizar y eliminar entidades.
Gran parte de la funcionalidad de JPA es expuesta por medio del EntityManager, de la cual ya hemos hablado con anterioridad, y es por medio de esta interface, que es posible realizar las operaciones básicas. Las operaciones o métodos que exponen EntityManager son persist, merge, remove, find entre otras.
Mediante esta clase es posible controlar las transacciones de JPA, es obtenida a través del EntityManager con el método getTransaction. Esta clase una serie de métodos que nos permitirán controlar las transacciones. Los métodos son los siguientes:
- Begin: Se utiliza para iniciar una nueva transacción. Lanza una IllegalStateExceptioncuando la transacción ya está activa.
- Commit: Realiza commit a la transacción activa. Lanza IllegalStateException cuando la transacción no está activa o RollbackException cuando se genera un error al realizar el commit
- Rollback: Realiza un Rollback de la transacción y echa atrás todos los cambios realizados durante la transacción. Lanza IllegalStateException cuando la transacción no está activa o PersistenceException ante cualquier posible error inesperado.
- setRollbackOnly: Marca la transacción para que se realice un Rollback después de terminar la ejecución (Se aconseja usar solo en EJB).
- GetRollbackOnly: Indica si la transacción ha sido marcada para hacer Rollback
- isActive: Retorna true si existe una transacción activa, false de lo contrario.
Método Persist
Mediante esta operación es posible persistir un nuevo dato en la base de datos, osea una nueva Entidad, la cual ha sido creada recientemente o persistir una Entidad que se encuentra en el Persistence Context (Atached).
El método persist
debe ser utilizada sólo para nuevas entidades. Desde la perspectiva de JPA, una entidad es nueva cuando nunca se ha asociado con una fila de la base de datos, lo que significa que no hay un registro de tabla en la base de datos que coincida con la entidad en cuestión.
La semántica de la operación de persistencia, aplicada a una entidad X es la siguiente:
- Si X es una entidad nueva, se gestiona. La entidad X se ingresará en la base de datos en o antes de la confirmación de la transacción o como resultado de la operación de vaciado.
- Si X es una entidad administrada preexistente, la operación de persistencia la ignora. Sin embargo, la operación de persistencia se conecta en cascada a las entidades referenciadas por X, si las relaciones de X a estas otras entidades se anotan con el valor de elemento de anotación cascade = PERSIST o cascade = ALL o se especifican con el elemento descriptor XML equivalente.
- Si X es una entidad eliminada, se gestiona.
- Si X es un objeto separado, se puede lanzar la EntityExistsException cuando se invoca la operación de persistencia, o la EntityExistsException u otra PersistenceException se puede lanzar al momento de la descarga o de confirmación.
- Para todas las entidades Y a las que hace referencia una relación de X, si la relación con Y se ha anotado con el valor del elemento en cascada en cascada = PERSIST o en cascada = TODO, la operación de persistencia se aplica a Y.
Método Merge
La operación merge es utiliza para actualizar una entidad existente que no pertenece a un Contexto de persistencia. Para entender mejor la operación merge, podemos ver lo que dice la especificación de JPA:
La semántica de la operación de fusión aplicada a una entidad X es la siguiente:
- Si X es una entidad separada, el estado de X se copia en una instancia X ‘de entidad administrada preexistente de la misma identidad o se crea una nueva copia administrada X’ de X.
- Si X es una nueva instancia de entidad, se crea una nueva instancia de entidad administrada X ‘y el estado de X se copia en la nueva instancia de entidad administrada X’.
- Si X es una instancia de entidad eliminada, la operación de combinación generará una excepción IllegalArgumentException (o la confirmación de la transacción fallará).
- Si X es una entidad gestionada, la operación de combinación la ignora, sin embargo, la operación de fusión se conecta en cascada a las entidades a las que hace referencia las relaciones de X si estas relaciones se han anotado con el valor del elemento en cascada cascada = MERGE o cascada = TODA anotación.
- Para todas las entidades Y a las que hace referencia las relaciones de X que tienen el valor del elemento en cascada cascade = MERGE o cascade = ALL, Y se fusiona recursivamente como Y ‘. Para todas las Y a las que hace referencia X, X ‘se establece como referencia Y’. (Tenga en cuenta que si se administra X, entonces X es el mismo objeto que X ‘).
- Si X es una entidad fusionada a X ‘, con una referencia a otra entidad Y, donde cascade = MERGE o cascade = ALL no se especifica, entonces la navegación de la misma asociación desde X’ produce una referencia a un objeto administrado Y ‘con el La misma identidad persistente que Y.
Método Remove
La operación remove es muy simple, pues solo es requerido enviar la Entidad que se desea remover. La Entidad tendrá que estar dentro del contexto de persistencia para poder ser eliminada, de lo contrario nos arrojara una excepción.
El objeto de entidad se elimina físicamente de la base de datos cuando se confirma la transacción. Los objetos incrustados que están contenidos en el objeto de entidad también se eliminan. Si la transacción se revierte y no se confirma, el objeto no se elimina.
Método Query
JPQL está parado para el lenguaje de consulta de persistencia de Java. Se utiliza para crear consultas contra entidades para almacenar en una base de datos relacional. JPQL está desarrollado en base a la sintaxis SQL. Pero no afectará directamente a la base de datos.
JPQL puede recuperar datos mediante la cláusula SELECT, puede hacer actualizaciones con cláusula UPDATE y DELETE cláusula.
Usando la interface “EntityManager”, podemos realizar accesos a la Base de datos, a través de la entidad correspondiente, pero tiene bastantes limitaciones en su funcionalidad.
WALTER ROSERO
Creador de Walter Rosero - SuperTecnoDroid | Responsable del Canal de YouTube Walter Rosero. Amante de la tecnología y juegos, me gusta aportar con un granito de arena al aprendizaje y la enseñanza. Soy editor y compositor en el área multimedia. Combino mi pasión por la enseñanza a través de la World Wide Web.
WALTER ROSERO
Hola soy Robinson Rosero, me dedico a crear contenido por medio de la World Wide Web, para ayudar a las personas y así poder desarrollar experiencia con nuevas ideas.