我想插入自动插入created_at日期时间和相应的updated_at日期时间的数据。
我有一个pojo:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "name")
private String name;
@Basic(optional = false)
@CreationTimestamp
@Column(name = "created_at")
@Temporal(TemporalType.TIMESTAMP)
private Date createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
@Temporal(TemporalType.TIMESTAMP)
private Date updatedAt;
在我的数据库中,我使用DATETIME作为created_at和updated_at的类型。但我无法插入数据,而是提供错误消息 not-null属性引用空值或瞬态值:com.project.test.entity.Stamp.createdAt。
我想知道为created_at和updated_at DateTime字段定义数据库模式的正确方法,以使其自动生成。
答案 0 :(得分:7)
您可以执行以下操作。
1)使用新日期():
初始化您创建和更新的日期 @Basic(optional = false)
@CreationTimestamp
@Column(name = "created_at")
@Temporal(TemporalType.TIMESTAMP)
private Date createdAt = new Date(); // initialize created date
@UpdateTimestamp
@Column(name = "updated_at")
@Temporal(TemporalType.TIMESTAMP)
private Date updatedAt=new Date(); // initialize updated date
2)并通过 new Date()提供更新日期的setter方法,而不向其传递任何值:
@PreUpdate
public void setUpdatedAt() {
this.updatedAt= new Date();
}
答案 1 :(得分:2)
编辑包含MYSQL表信息。
如果您希望您的真实来源是数据库,您可以使用@Generated并允许数据库设置创建更新时间戳。
@Generated(GenerationTime.Insert)
@Basic(optional = false)
@Column(name = "created_at")
@Temporal(TemporalType.TIMESTAMP)
private Date createdAt;
@Generated(GenerationTime.Always)
@Column(name = "updated_at")
@Temporal(TemporalType.TIMESTAMP)
private Date updatedAt;
这是针对MYSQL数据库,您需要为列设置更新DEFAULT和ON UPDATE。
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP