Cómo conocer si el método persist ha guardado la entidad correctamente
Ago03

Cómo conocer si el método persist ha guardado la entidad correctamente

Si nuestra aplicación usa JPA, tendremos muy presente el funcionamiento del método persist para guardar entidades en la base de datos. la firma del método persist, según la especificación de JPA 2.1 (la última hasta la fecha) el método persist consta de lo siguiente: Java /** * Make an instance managed and persistent. * @param entity * @throws EntityExistsException if the entity already exists. * (If the entity already exists, the EntityExistsException may * be thrown when the persist operation is invoked, or the * EntityExistsException or another PersistenceException may be * thrown at flush or commit time.) * @throws IllegalArgumentException if the instance is not an * entity * @throws TransactionRequiredException if there is no * transaction when invoked on a container-managed * entity manager that is of type * PersistenceContextType.TRANSACTION. */ public void persist(Object entity); 12345678910111213141516 /** * Make an instance managed and persistent. * @param entity * @throws EntityExistsException if the entity already exists. * (If the entity already exists, the EntityExistsException may * be thrown when the persist operation is invoked, or the * EntityExistsException or another PersistenceException may be * thrown at flush or commit time.) * @throws IllegalArgumentException if the instance is not an * entity * @throws TransactionRequiredException if there is no* transaction when invoked on a container-managed * entity manager that is of type * PersistenceContextType.TRANSACTION.*/public void persist(Object entity); Supongamos que tenemos la siguiente situación: Queremos insertar un usuario en base de datos Queremos conocer si realmente se ha insertado el usuario en base de datos Java UserEntity e = new UserEntity(); e.setName("Name"); e.setAge(30); em.persist(e); 1234 UserEntity e = new UserEntity();e.setName("Name");e.setAge(30);em.persist(e); Con esto persistimos nuestro usuario, pero dado a que el método persist no nos devuelve ningún feedback (sea un boolean o la misma entidad), ¿Qué podemos hacer nosotros para saber si el método persist ha ido bien? Pues tenemos varias opciones: #Opción 1. Método contains del EntityManager. Documentación Podríamos tener un método propio que sobreescriba el método persist de nuestro entityManager, de manera que nos devuelva un boolean, e implementarlo de la siguiente manera. UserEntity e = new UserEntity(); e.setName("Name"); e.setAge(30); em.persist(e); ---- return em.contains(e); 123456 UserEntity e = new UserEntity();e.setName("Name");e.setAge(30);em.persist(e);----return em.contains(e); De cualquier manera, esto nos devolvería true, siempre y cuando se compruebe que la entidad esté disponible en la gestión de persistencia del entityManager, no realmente cuando hayamos añadido la misma, aunque por lo general se de en el mismo caso. #Opción 2. Devolver la id de la entidad  (o la entidad completa) Si todas las id de nuestras entidades son del mismo tipo, podríamos sobrescribir el método persist de manera que tras persistir nuestra entidad (y forzar...

Read More