¿Qué es la auditoría en bases de datos y por qué es importante?
La auditoría en bases de datos es fundamental para el control y el manejo eficiente de los datos. Saber quién realizó cambios, qué cambios se hicieron y cuándo se realizaron es crucial para garantizar la integridad y la seguridad de los datos. En el contexto de las bases de datos, la auditoría ayuda a mantener un registro detallado de todas estas operaciones, lo cual puede ser invaluable en situaciones donde se necesite rastrear acciones o corregir errores.
¿Cómo implementar la auditoría con Spring Data JPA?
Spring Data JPA simplifica la implementación de auditorías mediante anotaciones que proporcionan una forma casi transparente de auditar entidades.
¿Qué configuraciones iniciales se necesitan?
Para activar la funcionalidad de auditoría de JPA, es necesario modificar la clase principal del proyecto:
Asegúrate de que la clase tiene la anotación @SpringBootApplication.
Añade la anotación @EnableJpaRepositories.
Incluye @EnableJpaAuditing para habilitar la auditoría.
Para auditar una entidad, como PixaEntity, necesitarás:
Añadir el AuditingEntityListener a la entidad.
Añadir columnas de tipo LocalDateTime para las fechas de creación y modificación.
Usar anotaciones de Spring Data como @CreatedDate y @LastModifiedDate para estas columnas.
@EntityListeners(AuditingEntityListener.class)publicclassPixaEntity{// otras columnas...@Column(name ="created_date")@CreatedDateprivateLocalDateTime createdDate;@Column(name ="modified_date")@LastModifiedDateprivateLocalDateTime modifiedDate;}
¿Cómo evitar que las fechas de auditoría se incluyan en la respuesta de JSON?
Las columnas de auditoría pueden no ser relevantes para el usuario final. Utiliza la anotación @JsonIgnore para excluir estas columnas de la respuesta JSON.
¿Cómo evitar la duplicación de columnas de auditoría?
Para evitar la duplicación de código al tener que añadir estas columnas a múltiples entidades, puedes crear una superclase que defina estos campos de auditoría y luego extenderla desde tus otras entidades.
Mejora la transparencia en el manejo de información.
Ayuda a proteger contra el acceso no autorizado o modificaciones indeseadas.
Proporciona información valiosa para resolver incidencias futuras.
Con estos pasos y configuraciones, estarás equipado para implementar un sistema robusto de auditoría utilizando Spring Data JPA, reduciendo la complejidad y mejorando la gestión de cambios en tus bases de datos. ¡Sigue explorando y aprendiendo para sacar el máximo provecho de las herramientas de Spring!
Cuando se actualzia si no se envia el campo createDate se actualiza como null, y si se envia con una nueva fecha no estaria haciendo la auditoria correctamente, por lo cual es mejor agregar en el column la propiedad updatable = false
Que buena clase, que gran utilidad que desde la API hecha en Spring Boot se pueda manejar el llenado de valor de estos campos de auditoria para la creación y actualización de registros en las tablas de la BD.
¿No sera mejor manejar esta auditoria desde la tabla con un trigger y asi nos evitamos todo este codigo?
Diría yo que depende de la necesidad, de cómo se necesite implmentar, entonces no te quedes con que uno u otro modo es mejor/peor, más bien aprende nuevas formas de hacer las cosas, que igual son herramientas que podrás usar en tu trabajo ya sea ahora o en el futuro.
Excelente clase, solamente me queda una duda cuando creamos un registro se crean ambas fechas tanto la de creación como la de actualización, mi duda es que el actualzar el registro creado se borra la fecha de creación y solamente queda la de actualización, es esto correcto?
Como vimos en el ejemplo compañero, si ya tenías registros en la tabla pizza_order antes de implementar la auditoría, entonces la columna de created_date te queda vacía al igual que la de modified_date. Si luego haces una actualización de un registro en la tabla pizza_order, entonces ahí se registrará la fecha en la columnamodified_date, pero la columna de created_datesigue sin llenarse. Cuando creas un nuevo registro en la tabla pizza_order, entonces sí se te llena ambas columnas de auditoría 😁
genial, yo antes para hacer esto utilizaba el @PrePersist()
dentro del entity
@PrePersist@PreUpdate
public void PreUpdate(){
this.fecha_modificacion = new Date();
}
public void PrePersist(){
this.fecha_alta = new Date();}
@PrePersistpublicvoidPrePersist(){this.fecha_alta=newDate();}```y así es como solventaba las auditorias
Para el update utilizaba @PreUpdate
```java
@PreUpdatepublicvoidPreUpdate(){this.fecha_modificacion=newDate();}```con estas anotaciones puedes ejecutar bloques de Código antes de un insert o antes de un update  
Waao dato interesante 😮 no sabía que existían jeje gracias compañero
Un comentario que me parece que puede ayudar: si la base de datos no se actualiza en los campos de auditoria, puede ser porque se esta utilizando una consulta nativa para realizar la modificación de datos.
Esto se debe a que JpaAuditing no tiene control sobre las entidades cuando se utiliza un query nativo, por lo que ahí se podria considerar el uso de JPQL o queryMethods que permitan a spring tener control sobre el lifecycle de las entidades
jajajaja lástima no haber visto está clase a las 11:11
Sé que no es un curso de intellij idea, pero alguien podría compartir los plugins que utiliza el profe para mejorar la experiencia de coding con este IDE?
Realmente ese autocompletado que hemos visto en clases pasadas con los queryMethods que hace el profesor y todas esas "ayudas" no son un plugin, sino que las tiene disponibles porque tiene el IDE IntelliJ Idea tipo Premium 😅
Si has estado recientemente inscrita a una carrera universitaria o bien sea el SENA también, puedes intentar inscribirte aquí para obtener el IDE Premium durante un tiempo gratis: 👇
Es decir que al momento de crear el MER , se debe tener en cuenta ?
por que cuando se utiliza el método "update" del "PizzaController" si se actualiza la fecha de modificación y cunado se utiliza el método "updatePrice" del "PizzaController" no se modifica la fecha ?
tengo la misma duda, se actualiza el precio en mysql pero no se grega la fecha de modificacion :s si lo llegaste a resolver, cuentame plis
@MappedSuperClass: Permite definir atributos comunes en una clase base que pueden ser heredados por múltiples entidades, evitando la duplicación de código. No Soporta Relaciones.
Si estás usando Spring Boot y has incluido la dependencia spring-boot-starter-data-jpa, Spring Boot automáticamente configura y habilita los repositorios JPA sin necesidad de la anotación @EnableJpaRepositories
Listo ✅
genial esta clase !!!!
✅
Cuando uso storedprocedure para insertar unas tablas en SQL Server, ¿debo enviar los datos de auditoría manualmente como parámetros? o ¿spring lo puede añadir de forma automática cuando sabe que entidades se están afectando?
Para que los campos de auditoría se llenen automáticamente al ejecutar un stored procedure en SQL Server desde Spring, es necesario que la lógica del stored procedure sea capaz de manejar estos campos. Spring Data JPA no puede rellenar automáticamente los campos de auditoría sin que el stored procedure los reciba.
Puedes optar por enviar explícitamente estos campos al stored procedure o modificar el procedimiento para que los llene internamente usando, por ejemplo, funciones de SQL para obtener la fecha actual. Así, podrás seguir utilizando la auditoría sin problemas.