对于某些Hibernate实体,我们需要存储其创建时间和上次更新时间。你将如何设计?
你将在数据库中使用什么数据类型(假设使用MySQL,可能与JVM时区不同)?数据类型是否支持时区?
你会在Java中使用什么数据类型(Date,Calendar,long,…)?
你将由谁负责设置时间戳(数据库,ORM框架(hibernate)或应用程序程序员)?
你将使用哪些注释进行映射(例如@Temporal)?
我不仅在寻找可行的解决方案,而且还在寻找安全且设计良好的解决方案。
你可以使用@CreationTimestamp和@UpdateTimestamp:
@CreationTimestamp
@UpdateTimestamp:
@CreationTimestamp @Temporal(TemporalType.TIMESTAMP) @Column(name = "create_date") private Date createDate; @UpdateTimestamp @Temporal(TemporalType.TIMESTAMP) @Column(name = "modify_date") private Date modifyDate;
如果使用的是JPA批注,则可以使用@PrePersist和@PreUpdate事件挂钩执行此操作:
@PrePersist
@PreUpdate
@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(); } }
或者你可以@EntityListener在类上使用注释,并将事件代码放置在外部类中。
@EntityListener