Jpa配置实体类创建时间更新时间自动赋值,@CreateDate,@LastModifiedDate

本文介绍了如何使用SpringBoot JPA的@CreatedDate和@LastModifiedDate注解,自动为实体类的创建时间和更新时间字段赋值,避免手动操作。通过创建基类并启用AuditingEntityListener,以及在启动类中添加@EnableJpaAuditing注解,可以实现这一功能。测试显示,新增和更新操作都能正确地更新时间戳,但若未修改任何字段,save方法不会改变更新时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作数据库映射实体类时,通常需要记录createTime和updateTime,如果每个对象新增或修改去都去手工操作创建时间、更新时间,会显得比较繁琐。

Springboot jpa提供了自动填充这两个字段的功能,简单配置一下即可。@CreatedDate、@LastModifiedDate、@CreatedBy、@LastModifiedBy前两个注解就是起这个作用的,后两个是设置修改人和创建人的,这里先不讨论。

首先,我们的很多实体类都是需要创建时间和更新时间的,我们不想在每个实体类里都去定义这两个字段,那么我们把它抽取到基类中,让实体类去继承它。

package com.tianyalei.testautotime.entity;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;

/**
* Created by wuwf on 17/4/21.
*/
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Integer id;

@CreatedDate
private Long createTime;

@LastModifiedDate
private Long update
根据以下实体示例,参考其中的注解个注释,帮我在PDManer 创建一个 通用的 可以创建java实体的模版,根据模版可以直接生成程序代码, 以下是项目中的其他实体 /** * Help实体 * @author 自动生成 * @version V1.0.0 2025/06/09 * @since V100R001 */ @MappedSuperclass @ApiModel(description="Help") @Data @EntityListeners(AuditingEntityListener.class) public class Help implements BaseEntity,Serializable { private static final long serialVersionUID = 1L; public Help() { this.orgId = StringUtil.isNotNull(PrincipalContextUser.getPrincipal()) ? PrincipalContextUser.getPrincipal().getOrgId() : ""; this.domainId = StringUtil.isNotNull(PrincipalContextUser.getPrincipal()) ? PrincipalContextUser.getPrincipal().getOrgId() : ""; } /** * 主键id */ @Id @Column(length = 50) private String id = UUIDHelper.NewID(); /** * 名称 */ @Column(length=50) @ApiModelProperty("名称") @NotBlank(message = "分析项目名称{validation.message.blank}") @Length(message = "分析项目名称{validation.message.length}", max = 50) private String analyzeItemName; /** * 分析因子编号 */ @Column(length=50) @ApiModelProperty("分析因子编号") @Length(message = "分析项目编号{validation.message.length}", max = 50) private String analyzeItemCode; /** * 变量名称(预留,前台改为别名) */ @Column(length=50) @ApiModelProperty("变量名称(预留,前台改为别名)") @Length(message = "分析项目别名{validation.message.length}", max = 50) private String variableName; /** * 统计别名 */ @ApiModelProperty("统计别名") @Length(message = "统计别名{validation.message.length}", max = 255) private String statisticalAlias; /** * 拼音缩写 */ @Column(length=50) @ApiModelProperty("拼音缩写") private String pinYin; /** * 全拼 */ @Column(length=100) @ApiModelProperty("全拼") private String fullPinYin; /** * CAS号 */ @Column(length=50) @ApiModelProperty("CAS号") @Length(message = "CAS号{validation.message.length}", max = 50) private String casNum; /** * 是否删除 */ @Column(nullable=false) @ColumnDefault("0") @ApiModelProperty("是否删除") private Boolean isDeleted=false; /** * 排序值 */ @Column(nullable=false) @ColumnDefault("0") @ApiModelProperty("排序值") private Integer orderNum; /** * 组织机构id */ @Column(length=50,nullable=false) @ColumnDefault("'00000000-0000-0000-0000-000000000000'") @ApiModelProperty("组织机构id") private String orgId; /** * 创建人 */ @Column(length=50,nullable=false) @ColumnDefault("'00000000-0000-0000-0000-000000000000'") @CreatedBy @ApiModelProperty("创建人") private String creator; /** * 创建时间 */ @Column(nullable=false) @ColumnDefault("getdate") @CreatedDate @ApiModelProperty("创建时间") private Date createDate; /** * 所属实验室 */ @Column(length=50,nullable=false) @ColumnDefault("'00000000-0000-0000-0000-000000000000'") @ApiModelProperty("所属实验室") private String domainId; /** * 修改人 */ @Column(length=50,nullable=false) @ColumnDefault("'00000000-0000-0000-0000-000000000000'") @LastModifiedBy @ApiModelProperty("修改人") private String modifier; /** * 修改时间 */ @Column(nullable=false) @ColumnDefault("getdate") @LastModifiedDate @ApiModelProperty("修改时间") private Date modifyDate; }
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值