大无语死了,SpringBoot发展了这么久,国内资料还这么少,对小白真的太不友好了
找个JPA自动设置创建时间,更新时间的资料都是一大堆麻烦的步骤,要么就不全。。。
前言
进入正题,本文提供了两种简单的解决方案,用来自动设置记录的创建时间和更新时提供了两种
方案1
使用hibernate库的注解@CreationTimestamp和@UpdateTimestamp
支持多种时间类型:
java.time.LocalDateTime
java.time.LocalDate
java.time.LocalTime
java.time.Instant
java.util.Date
java.lang.Long, long
代码参考
import org.hibernate.annotations.CreationTimestamp
import org.hibernate.annotations.UpdateTimestamp
// ...
@CreationTimestamp
var createdAt: Date?=null,
@UpdateTimestamp
var updatedAt: Date?=null
仅此而已。
方案2
使用springframework库的注解@CreatedDate和@LastModifiedDate
该方案相比于方案1要稍微复杂一些
使用AuditingEntityListener注解Entry类
使用EnableJpaAuditing注解Application类
创建Entry字段
import org.springframework.data.annotation.CreatedDate
import org.springframework.data.annotation.LastModifiedDate
// ...
@CreatedDate
var createdAt: Date?=null,
@LastModifiedDate
var updatedAt: Date?=null
bug: 通过指定id整体更新时,create_at会被置为null
这里会不会是操作违规,不能整体更新?
解决方案
在插入数据的时候,先判断一下是否存在,如果存在就把旧的create_at值赋给新的实体
其中的变量根据你自己的情况相应更改
if(newInfo.id!=null && infoRepository?.existsById(newInfo.id!!)==true){
newInfo.createdAt = infoRepository?.findById(newInfo.id!!)?.orElseThrow()?.createdAt
}
领取专属 10元无门槛券
私享最新 技术干货