一尘不染

使用Hibernate和MySQL的创建时间戳和最后更新时间戳

java

对于某些Hibernate实体,我们需要存储其创建时间和上次更新时间。你将如何设计?

  • 你将在数据库中使用什么数据类型(假设使用MySQL,可能与JVM时区不同)?数据类型是否支持时区?

  • 你会在Java中使用什么数据类型(Date,Calendar,long,…)?

  • 你将由谁负责设置时间戳(数据库,ORM框架(hibernate)或应用程序程序员)?

  • 你将使用哪些注释进行映射(例如@Temporal)?

我不仅在寻找可行的解决方案,而且还在寻找安全且设计良好的解决方案。


阅读 337

收藏
2020-03-20

共2个答案

一尘不染

你可以使用@CreationTimestamp@UpdateTimestamp:

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

@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "modify_date")
private Date modifyDate;
2020-03-20
一尘不染

如果使用的是JPA批注,则可以使用@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在类上使用注释,并将事件代码放置在外部类中。

2020-03-20