如何在Play中创建自动生成的日期/时间戳字段!/ JPA?


问题内容

我想在实体对象上添加一个Date / DateTime / Timestamp字段,该字段将在创建/持久化实体并将其设置为“现在”时自动创建,永远不再更新。

其他用例包括的字段始终会更新为包含实体的最后修改日期。

我以前是在mysql模式中达到这种要求的。

在Play中做到这一点的最佳方法是什么!/ JPA?


问题答案:

您可以使用一个代码片段来实现所需的功能。看一看:

// Timestampable.java

package models;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Version;

import play.db.ebean.Model;

@MappedSuperclass
public class Timestampable extends Model {

  @Id
  @GeneratedValue
  public Long id;

  @Column(name = "created_at")
  public Date createdAt;

  @Column(name = "updated_at")
  public Date updatedAt;

  @Version
  public int version;

  @Override
  public void save() {
    createdAt();
    super.save();
  }

  @Override
  public void update() {
    updatedAt();
    super.update();
  }

  @PrePersist
  void createdAt() {
    this.createdAt = this.updatedAt = new Date();
  }

  @PreUpdate
  void updatedAt() {
    this.updatedAt = new Date();
  }
}