Uso de @PrePersist y @PreUpdate en JPA
En esta nueva entrada vamos a ver el uso de @PrePersist y @PreUpdate en Jpa en nuestras aplicaciones con Hibernate y JPA. Gracias a estas anotaciones vamos a poder realizar insercciones y actualizaciones mediante un interceptor antes de realizar insercciones en Base de Datos.
El uso de @PrePersist y @PreUpdate, nos ayudará a realizar operaciones justo antes de lanzar cualquier operación en Base de Datos, por lo que nos va a permitir modificar el dato a guardar.
¿Qué son las anotaciones @PrePersist y @PreUpdate en JPA?
Tanto la anotación @PrePersist como @PreUpdate fueron introducidas desde la versión 1.0 de JPA.
La anotación @PrePersist es un hook dentro de JPA que lanza un evento antes de realizar una insercción de una entidad en Base de Datos.
Por otro lado la anotación @PreUpdate, va a lanzar un evento justo antes de que una operación de actualización se materialice en Base de Datos.
¿Cómo se usan las anotaciones @PrePersist y @PreUpdate de JPA?
Ambas anotaciones son usadas cuando es necesario hacer uso de alguna operación contra o en Base de Datos. Por lo que deben ir siempre en una clase de tipo Entidad y marcada con la @Entity de JPA.
@Getter @Setter @Entity @NoArgsConstructor @EqualsAndHashCode(onlyExplicitlyIncluded = true) @Slf4j public class Employee { @Id @GeneratedValue @EqualsAndHashCode.Include() private Long id; private String name; private UUID num; @ManyToMany(mappedBy = "employees") public List<Department> departments = new ArrayList<>(); @PrePersist private void prePersistNum(){ log.info("PrePersist method"); if(null == num){ num= UUID.random(); } } @PreUpdate public void preUpdateFunction(){ log.info("We are going to preupdate something"); } }
Los métodos anotados con @PrePersist y @PreUpdate irán sin parámetros de entrada y serán de tipo void, en otro caso devolverán algún tipo de excepción.
¿Cuándo invoca JPA los métodos @PrePersist y @PreUpdate?
El método que se encuentré con la anotación @PrePersist será lanzado en el momento después de realizar un save de nuestra entidad.
En cambio el método que se encuentra anotado con @PreUpdate será realizado justo cuando el flush del entity manager es realizado.
Conclusión
En esta entrada hemos visto como através del uso de @Prepersist y @Preupdate en JPA podemos realizar comprobaciones o modificaciones de nuestras entidades que van a ser guardadas en Base de Datos.
Esta funcionalidad nos ayudará por ejemplo a cambiar algún valor o verificar que un valor no sea null (aunque esto debería ser comprobado con las constraint).
Otro artículo que te puede interesar sobre JPA es el uso de auditoría con anotaciones.
Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!