Saltar al contenido

Cómo crear un campo de fecha/marca de tiempo generado automáticamente en un Play! / JPA?

Queremos enseñarte la mejor información que hemos encontrado en internet. Nosotros esperamos que te sea útil y si quieres aportar cualquier detalle que nos pueda ayudar a crecer hazlo libremente.

Solución:

Hay un fragmento de código que puede adaptar para lograr lo que desea. Echar un vistazo:

// Timestampable.java

package models;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Version;

import play.db.ebean.Model;

@MappedSuperclass
public class Timestampable extends Model 

  @Id
  @GeneratedValue
  public Long id;

  @Column(name = "created_at")
  public Date createdAt;

  @Column(name = "updated_at")
  public Date updatedAt;

  @Version
  public int version;

  @Override
  public void save() 
    createdAt();
    super.save();
  

  @Override
  public void update() 
    updatedAt();
    super.update();
  

  @PrePersist
  void createdAt() 
    this.createdAt = this.updatedAt = new Date();
  

  @PreUpdate
  void updatedAt() 
    this.updatedAt = new Date();
  

Creo que puedes lograrlo al menos de dos maneras.

Valor predeterminado de la base de datos

Creo que la forma más fácil sería marcar la columna como updateable=false, insertable=false (esto le dará inmutabilidad: el JPA no incluirá esta columna en INSERT y UPDATE declaraciones) y configurando la columna de la base de datos para que tenga un valor predeterminado de NOW.

Métodos de devolución de llamada del ciclo de vida de JPA

Otra forma sería proporcionar una @PrePersist método de devolución de llamada del ciclo de vida que establecería su objeto de fecha en la fecha real new Date(). Luego, debe asegurarse de que nadie edite este valor, por lo que no debe proporcionar ningún setter para esta propiedad.

Si desea que la fecha se actualice cuando se modifica la entidad, podría, de manera similar, implementar @PreUpdate método de devolución de llamada del ciclo de vida que establecería la fecha de modificación real.

Solo recuerde que si está trabajando con objetos de fecha, debe hacer un copia defensiva de su objeto Fecha (por lo que debe devolver algo como new Date(oldDate.getTime()); en lugar de simple return oldDate).
Esto evitará que los usuarios usen getter de su fecha y modifiquen su estado.

Creo que es un poco claro

    @Column(name = "created_at")
    @CreationTimestamp
    private LocalDateTime createdAt;

    @Column(name = "updated_at")
    @UpdateTimestamp
    private LocalDateTime updatedAt;

¡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 *