Saltar al contenido

¿Cómo generar automáticamente un campo de marca de tiempo creado o modificado?

Te doy la bienvenida a nuestro sitio web, ahora encontrarás la respuesta de lo que estabas buscando.

Solución:

En 4.3 Hibernate con JPA, se puede usar “@CreationTimestamp” y “@UpdateTimestamp” directamente en los campos de fecha.

CreationTimestamp java doc

UpdateTimestamp java doc

Puedes crear un new Date() cada vez que se crea su instancia, y luego actualice el updated campo cada vez que la entidad se actualiza:

private Date created = new Date();
private Date updated = new Date();

@PreUpdate
public void setLastUpdate()   this.updated = new Date(); 

No proporciones un setter para ninguno de estos métodos, solo getters.

Puede optar por Spring Data JPA, Spring lo ha facilitado con la anotación @CreatedBy, @CreatedDate, @LastModifiedBy, @LastModifiedDate en sus campos. Puede seguir el siguiente ejemplo simple

// Will need to enable JPA Auditing
@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
class JpaConfig 
    // Creating a bean of AuditorAwareImpl which will provide currently logged in user
    @Bean
    public AuditorAware auditorAware() 
        return new AuditorAwareImpl();
    


// Moving necessary fields to super class and providing AuditingEntityListener entity listner class
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
abstract class Auditable 

    @CreatedBy
    protected U createdBy;

    @CreatedDate
    @Temporal(TIMESTAMP)
    protected Date createdDate;

    @LastModifiedBy
    protected U lastModifiedBy;

    @LastModifiedDate
    @Temporal(TIMESTAMP)
    protected Date lastModifiedDate;

    // Getters and Setters


// Creating implementation of AuditorAware and override its methods to provide currently logged in user
class AuditorAwareImpl implements AuditorAware 

    @Override
    public String getCurrentAuditor() 
        return "Naresh";
        // Can use Spring Security to return currently logged in user
        // return ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername()
    


@Entity
class File extends Auditable 
    @Id
    @GeneratedValue
    private Integer id;
    private String name;
    private String content;

    // Getters and Setters
 

Puede leer más en mi artículo Spring Data JPA Auditing: Saving CreatedBy, CreatedDate, LastModifiedBy, LastModifiedDate automáticamente para obtener más detalles.

Calificaciones y reseñas

Nos puedes añadir valor a nuestro contenido asistiendo con tu experiencia en las ilustraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *