Creation timestamp and last update timestamp with Hibernate and MySQL Creation timestamp and last update timestamp with Hibernate and MySQL java java

Creation timestamp and last update timestamp with Hibernate and MySQL


If you are using the JPA annotations, you can use @PrePersist and @PreUpdate event hooks do this:

@Entity@Table(name = "entities")    public class Entity {  ...  private Date created;  private Date updated;  @PrePersist  protected void onCreate() {    created = new Date();  }  @PreUpdate  protected void onUpdate() {    updated = new Date();  }}

or you can use the @EntityListener annotation on the class and place the event code in an external class.


You can just use @CreationTimestamp and @UpdateTimestamp:

@CreationTimestamp@Temporal(TemporalType.TIMESTAMP)@Column(name = "create_date")private Date createDate;@UpdateTimestamp@Temporal(TemporalType.TIMESTAMP)@Column(name = "modify_date")private Date modifyDate;


Taking the resources in this post along with information taken left and right from different sources, I came with this elegant solution, create the following abstract class

import java.util.Date;import javax.persistence.Column;import javax.persistence.MappedSuperclass;import javax.persistence.PrePersist;import javax.persistence.PreUpdate;import javax.persistence.Temporal;import javax.persistence.TemporalType;@MappedSuperclasspublic abstract class AbstractTimestampEntity {    @Temporal(TemporalType.TIMESTAMP)    @Column(name = "created", nullable = false)    private Date created;    @Temporal(TemporalType.TIMESTAMP)    @Column(name = "updated", nullable = false)    private Date updated;    @PrePersist    protected void onCreate() {    updated = created = new Date();    }    @PreUpdate    protected void onUpdate() {    updated = new Date();    }}

and have all your entities extend it, for instance:

@Entity@Table(name = "campaign")public class Campaign extends AbstractTimestampEntity implements Serializable {...}