如何在 JPA 实体中自动存储日期?

How do I automatically store Date in JPA entity?

我在 Spring 中有一个 JPA 实体,其中我有一个类型为 Date 的 created_at 字段。我想自动将其初始化为当前日期。我怎样才能做到这一点?这是我的代码:

public class ClientModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private BigInteger id;
    private String client_id;
    private String client_name;
    private String client_secret;
    private String status;
    private Date created_at;
}

目前我正在做这个,

java.util.Date javaDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(javaDate.getTime());
client.setCreated_at(sqlDate);

有什么替代方案吗?

您可以使用 CreatedDate 注释,如下例所示:

public class ClientModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private BigInteger id;
    private String client_id;
    private String client_name;
    private String client_secret;
    private String status;

    @Column(name = "created_at", nullable = false, updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @CreatedDate
    private Date created_at;
}

创建新 ClientModel 时,不要为 created_at 设置任何值。 Spring 将自动初始化为当前日期。

我会通过事件以对 JPA 更友好的方式提出建议。

例子 @PrePersist void onPrePersist() {created_at = new java.util.Date();}

这样实体将不会与 Spring 绑定。因此,如果在非 Spring 环境中需要相同的实体,那么它也可以工作。