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.
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 {...}