使用Hibernate和MySQL创建时间戳和上次更新时间戳

2022-08-31 05:12:28

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

  • 您将在数据库中使用哪些数据类型(假设MySQL,可能位于与JVM不同的时区)?数据类型是否可识别时区?

  • 您将在Java中使用哪些数据类型(, , , ... )?DateCalendarlong

  • 您将让谁负责设置时间戳 — 数据库、ORM 框架(Hibernate)还是应用程序员?

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

我不仅在寻找一个有效的解决方案,而且在寻找一个安全且设计良好的解决方案。


答案 1

如果您使用的是 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


答案 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;