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;