spring-data-jpa使用日期
在以往的一些项目中,我们在每张mysql表创建的时候都会增加两个时间字段,create_time和update_time.
用户记录数据的入库和更新时间。
但在实体类上,我们并没有将这两个时间字段明确定义出来。字段的赋值都是由mysql自动完成。
比方下面一个建表语句
CREATE TABLE if not exists `process_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `project_code` varchar(255) NOT NULL comment '项目ID', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 comment '工作流表'
但是如果这两个日期需要传递到前端进行展示。
那么实体类中就必须定义了。
@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "process_info") public class ProcessInfo implements Serializable { private static final long serialVersionUID = 2964930219754666582L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @NotEmpty @ApiModelProperty("项目ID") private String projectCode; @CreationTimestamp @Column(name = "create_time") private LocalDateTime createTime; @UpdateTimestamp @Column(name = "update_time") private LocalDateTime updateTime; @PrePersist protected void onCreate() { updateTime = createTime = LocalDateTime.now(); } @PreUpdate protected void onUpdate() { updateTime = LocalDateTime.now(); } }
比较特殊的地方在于,之前的时间创建、更新都是由mysql自动完成。
但现在我们的对象里已经有了这两个字段,如果我们不进行赋值,mysql就会认为我们在这两列要保存成null。
这个时候就跟我们的意图相违背。
也就是说当我们在实体类中创建了这两个字段之后,这两个字段的值的生成的责任就从mysql转移到hibernate中来。
我们需要给这两个字段指定值的生成策略。