JPA中@CreatedDate和@LastModifiedDate的使用方式

 更新时间:2023年11月22日 10:06:22   作者:Evan Wang  
这篇文章主要介绍了JPA中@CreatedDate和@LastModifiedDate的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前些时间写了新项目,然后尝试使用了Spring Data JPA,发现新世界。

很多功能都可以基于注解实现,为开发省去了不少功夫。

关于时间的生成注解@CreatedDate@LastModifiedDate的使用,在此记录一下。

一、使用步骤

1.在实体类上加上注解 @EntityListeners(AuditingEntityListener.class),在相应的字段上添加对应的时间注解 @LastModifiedDate@CreatedDate

注意:日期的类型可以使用Date,也可以使用Long。我一般习惯用Date

//@Data lombok注解,替我们生成getter和setter。
@Data
@Entity
@Table(name = "task")
@EntityListeners(AuditingEntityListener.class)
public class Task {
    /**
     * 自增主键
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    /**
     * 创建时间
     */
    @CreatedDate
    @Column(name = "createTime", columnDefinition = "timestamp not null default current_timestamp")
    private Date createTime;

    /**
     * 更新时间
     */
    @LastModifiedDate
    @Column(name = "updateTime", columnDefinition = "timestamp not null default current_timestamp")
    private Date updateTime;
}

2.在Application启动类中添加注解 @EnableJpaAuditing

@EnableJpaAuditing
@SpringBootApplication
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    } 
}

3.除了上面提到的注解外,Spring Data JPA 还提供 @CreatedBy@LastModifiedBy 注解,用于保存和更新当前操作用户的信息(如id、name)。

如果有这方面的需求,可以参考下面的配置实现,代码如下:

@Data
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Task {

  	/**
     * 自增主键
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    /**
     * 创建时间
     */
    @CreatedDate
    @Column(name = "createTime", columnDefinition = "timestamp not null default current_timestamp")
    private Date createTime;

    /**
     * 更新时间
     */
    @LastModifiedDate
    @Column(name = "updateTime", columnDefinition = "timestamp not null default current_timestamp")
    private Date updateTime;
    
     /**
     * 创建人
     */
    @CreatedBy
    @Column(name = "createBy", columnDefinition = "varchar(255) not null")
    private String createBy;

    /**
     * 最后修改人
     */
    @LastModifiedBy
    @Column(name = "lastModifiedBy", columnDefinition = "varchar(255) not null")
    private String lastModifiedBy;
}

二、获取操作员信息

/**
 * Spring Data JPA通过AuditorAware<T>接口获取用户信息,
 * 其中泛型T可以为String保存用户名,也可以为Long/Integer保存用户ID。
 * @author EvanWang
 *
 */
@Component
public class AuditorConfig implements AuditorAware<String> {

    /**
     * 返回操作员标志信息
     *
     * @return
     */
    @Override
    public Optional<String> getCurrentAuditor() {
        // 这里应根据实际业务情况获取具体信息
        return Optional.of(userName);
    }
}

三、补充注解

Hibernate 也提供了类似上述时间注解的功能实现,这种方法只需要一步配置,更改为注解 @UpdateTimestamp@CreationTimestamp 

代码如下:

@Data
@MappedSuperclass
@NoArgsConstructor
@AllArgsConstructor
public class Task {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @UpdateTimestamp
    @Column(name = "updateTime", columnDefinition = "timestamp not null default current_timestamp")
    private Date updateTime;

    @CreationTimestamp
    @Column(name = "updateTime", columnDefinition = "timestamp not null default current_timestamp")
    private Date createTime;
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java DFA算法案例详解

    Java DFA算法案例详解

    这篇文章主要介绍了Java DFA算法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • java中List移除元素的四种方式

    java中List移除元素的四种方式

    本文主要介绍了java中List移除元素的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Java执行SQL脚本文件到数据库详解

    Java执行SQL脚本文件到数据库详解

    这篇文章主要为大家详细介绍了Java执行SQL脚本文件到数据库的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Java设计模块系列之书店管理系统单机版(三)

    Java设计模块系列之书店管理系统单机版(三)

    这篇文章主要为大家详细介绍了Java单机版的书店管理系统设计模块和思想第三章,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Java搜索与图论之DFS和BFS算法详解

    Java搜索与图论之DFS和BFS算法详解

    DFS指在进行算法运算时,优先将该路径的当前路径执行完毕,执行完毕或失败后向上回溯尝试其他途径。BFS指在进行算法运算时,优先将当前路径点的所有情况罗列出来,然后根据罗列出来的情况罗列下一层。本文介绍了二者的实现与应用,需要的可以参考一下
    2022-11-11
  • MyBatisPlus防全表更新与删除的实现示例

    MyBatisPlus防全表更新与删除的实现示例

    本文主要介绍了MyBatisPlus防全表更新与删除的实现示例,针对 update 和 delete 语句,阻止恶意的全表更新和全表删除,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 关于Map的遍历以及转JsonArray存储方式

    关于Map的遍历以及转JsonArray存储方式

    在Java开发过程中,经常会遇到需要对复杂数据结构进行处理的情况,本案例以List<Map<String,Object>>为例,介绍了如何遍历该数据结构,并根据特定条件筛选出符合要求的元素,通过自定义一个Edit类来模拟形成一个新的Map对象,实现了数据的有序存储
    2024-11-11
  • Java中finally释放的是什么资源

    Java中finally释放的是什么资源

    本文详细解释了finally块的作用及常见的需要释放的资源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • java中单例模式讲解

    java中单例模式讲解

    这篇文章主要介绍了java中单例模式,本文通过简单的案例,讲解了该模式在java中的使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java设计哈希映射的方法

    Java设计哈希映射的方法

    这篇文章主要介绍了Java设计哈希映射的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-05-05

最新评论