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实现

    身份证号码验证算法深入研究和Java实现

    这篇文章主要介绍了身份证号码验证算法深入研究和Java实现,本文讲解了18身份证号码的结构、根据17位数字本体码获取最后一位校验码程序实例等内容,需要的朋友可以参考下
    2015-06-06
  • 利用github搭建个人maven仓库的方法步骤

    利用github搭建个人maven仓库的方法步骤

    这篇文章主要介绍了利用github搭建个人maven仓库的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 分模块构建Maven工程的方法步骤

    分模块构建Maven工程的方法步骤

    这篇文章主要介绍了分模块构建Maven工程的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java使用hutool实现文件大小的友好输出

    Java使用hutool实现文件大小的友好输出

    这篇文章主要为大家详细介绍了Java如何使用hutool实现文件大小的友好输出,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-11-11
  • java封装类型与基础类型对比示例分析

    java封装类型与基础类型对比示例分析

    这篇文章主要为大家介绍了java封装类型与基础类型对比示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • JPA原生SQL(自定义SQL)分页查询逻辑详解

    JPA原生SQL(自定义SQL)分页查询逻辑详解

    这篇文章主要介绍了JPA原生SQL(自定义SQL)分页查询逻辑详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot+jsp项目启动出现404的解决方法

    SpringBoot+jsp项目启动出现404的解决方法

    这篇文章主要介绍了SpringBoot+jsp项目启动出现404的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Java Collection 接口和常用方法综合详解

    Java Collection 接口和常用方法综合详解

    Collection派生出三个子接口,Set代表不可重复的无序集合、List代表可重复的有序集合、Queue是java提供的队列实现,通过它们不断的扩展出很多的集合类,接下来我们详细介绍一下
    2021-11-11
  • Spring中事务管理的四种方法(银行转账为例)

    Spring中事务管理的四种方法(银行转账为例)

    这篇文章主要给大家介绍了关于Spring中事务管理的四种方法,文中是以银行转账为例,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • Intellij Idea修改代码方法参数自动提示快捷键的操作

    Intellij Idea修改代码方法参数自动提示快捷键的操作

    这篇文章主要介绍了Intellij Idea修改代码方法参数自动提示快捷键的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论