如何在 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 环境中需要相同的实体,那么它也可以工作。
我在 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 环境中需要相同的实体,那么它也可以工作。