Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Data JPA 时间注解:@CreatedDate 和 @LastModifiedDate

Spring Data JPA 时间注解:@CreatedDate 和 @LastModifiedDate

作者头像
happyJared
发布于 2020-02-11 07:48:25
发布于 2020-02-11 07:48:25
4.5K10
代码可运行
举报
文章被收录于专栏:happyJaredhappyJared
运行总次数:0
代码可运行

选择 Spring Data JPA 框架开发时,常用在实体和字段上的注解有@Entity@Id@Column等。在表设计规范中,通常建议保留的有两个字段,一个是更新时间,一个是创建时间。Spring Data JPA 提供了相应的时间注解,只需要两步配置,就可以帮助开发者快速实现这方面的功能。

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

注意:日期类型可以用 Date 也可以是 Long

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
@EntityListeners(AuditingEntityListener.class)
public class User {

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

     /**
     * 更新时间
     */
    @LastModifiedDate
    @Column(nullable = false)
    private Long updateTime;

     /**
     * 创建时间
     */
    @CreatedDate
    @Column(updatable = false, nullable = false)
    private Date createTime;

    // 省略getter和setter
  1. 在Application启动类中添加注解 @EnableJpaAuditing
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@EnableJpaAuditing
@SpringBootApplication
public class TestApplication {

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

此外,Spring Data JPA 还提供 @CreatedBy@LastModifiedBy 注解,用于保存和更新当前操作用户的信息(如id、name)。如果有这方面的需求,可以参考下面的配置实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
@EntityListeners(AuditingEntityListener.class)
public class User {

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

     /**
     * 更新时间
     */
    @LastModifiedDate
    @Column(nullable = false)
    private Long updateTime;

     /**
     * 创建时间
     */
    @CreatedDate
    @Column(updatable = false, nullable = false)
    private Date createTime;
    
     /**
     * 创建人
     */
    @CreatedBy
    private Integer createBy;

    /**
     * 最后修改人
     */
    @LastModifiedBy
    private Integer lastModifiedBy;

    // 省略getter和setter

配置实现AuditorAware接口,以获取字段需要插入的信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class AuditorConfig implements AuditorAware<Integer> {

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

}

2019.04 补充

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@MappedSuperclass
@NoArgsConstructor
@AllArgsConstructor
public class BaseEntity {

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

    @UpdateTimestamp
    @Column(nullable = false)
    private Date updateTime;

    @CreationTimestamp
    @Column(nullable = false, updatable = false)
    private Date createTime;

    @NotNull
    private Boolean deleted = false;

}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
标准的一知半解,天下文章一大抄。问你下@CreatedDate 和 @LastModifiedDate,取到的是本地时间还是数据库时间?试过吗?
标准的一知半解,天下文章一大抄。问你下@CreatedDate 和 @LastModifiedDate,取到的是本地时间还是数据库时间?试过吗?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Spring Data JPA 的时间注解:@CreatedDate 和 @LastModifiedDate
选择 Spring Data JPA 框架开发时,常用在实体和字段上的注解有@Entity、@Id、@Column等。在表设计规范中,通常建议保留的有两个字段,一个是更新时间,一个是创建时间。Spring Data JPA 提供了相应的时间注解,只需要两步配置,就可以帮助开发者快速实现这方面的功能。
happyJared
2018/12/24
6.3K0
java 常用注解, 常用关键字
@Controller用于标记在一个类上,使用它标记的类就是一个Spring(MVC,BOOT)的 Controller类,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了 @RequestMapping 注解。
默 语
2024/11/20
1890
java 常用注解, 常用关键字
Spring Data JPA 自动保存操作人 操作时间等
有些业务数据需要对数据的创建人、创建时间、最后更新人和最后更新时间进行记录。如果使用Spring Data Jpa做数据新增或更新,可实现自动保存这些信息而不需要显式设置对应字段的值。实现自动记录上述信息主要有5个注解:
BUG弄潮儿
2022/03/08
1.6K0
Spring Data JPA 自动生成表列顺序混乱问题,老方法已失效,查收最新版吧
最近把Spring Boot的版本升级到了3.3.5,突然发现一个问题:当使用Spring Data JPA自动生成表的时候,所产生的列顺序与Entity类中的变量顺序不一致了。比如,有一个下面这样的Entity:
程序猿DD
2025/02/10
1150
Spring Data JPA 自动生成表列顺序混乱问题,老方法已失效,查收最新版吧
一个迟来的赞,送给JPA。AbstractEntity需要准备些什么?
本篇属于代码解析系列文章之一,主要内容是JPA的基础父类设计。参考代码:https://github.com/xjjdog/bcMall/blob/master/bc-utils/src/main/java/cn/xjjdog/bcmall/utils/db/AbstractEntity.java
xjjdog
2021/03/10
1.6K0
一个迟来的赞,送给JPA。AbstractEntity需要准备些什么?
Jpa配置实体类创建时间更新时间自动赋值,@CreateDate,@LastModifiedDate
操作数据库映射实体类时,通常需要记录createTime和updateTime,如果每个对象新增或修改去都去手工操作创建时间、更新时间,会显得比较繁琐。
天涯泪小武
2019/01/17
5.2K0
接近8000字的Spring/SpringBoot常用注解总结!安排!
可以毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景。对于每一个注解我都说了具体用法,掌握搞懂,使用 SpringBoot 来开发项目基本没啥大问题了!
Guide哥
2020/05/07
2.1K0
接近8000字的Spring/SpringBoot常用注解总结!安排!
SpringBoot 填坑 | CentOS7.4 环境下,MySQL5.7 表时间字段默认值设置失效
如题,今天这篇是一个刚认识不久的小师弟的投稿。交谈中感觉技术水平与代码素养非常高,关键是才大二呀。那会我应该还在玩泥巴吧,真是后生可畏。
JavaFish
2019/10/17
1.9K0
SpringBoot 填坑 | CentOS7.4 环境下,MySQL5.7 表时间字段默认值设置失效
Spring-Data-Jpa入门教程(一)
JPA,全英文名叫Java Persistence API,就是java持久化api,是SUN公司推出的一套基于ORM的规范。
风筝故乡
2021/07/19
6340
Spring-Data-Jpa入门教程(一)
[Spring cloud 一步步实现广告系统] 5. 投放系统配置+启动+实体类
实体类和数据库表一般是一一对应,通常称之为entity,以用户表为例:Lombok传送门
Isaac Zhang
2019/09/10
4190
补习系列(19)-springboot JPA + PostGreSQL
PostGreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS),号称世界上最先进的开源关系型数据库。经过长达15年以上的积极开发和不断改进,PostGreSQL已在可靠性、稳定性、数据一致性等获得了很大的提升。
美码师
2019/04/09
2.3K0
补习系列(19)-springboot JPA + PostGreSQL
Spring Data JPA系列2:快速在SpringBoot项目中熟练使用JPA
这是Spring Data JPA系列的第2篇,在上一篇《Spring Data JPA系列1——JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文带你厘清个中曲直,给你个选择SpringDataJPA的理由!》中,我们对JPA的基本概念有了一个整体的了解,也对JAVA中进行DB操作的一些周边框架、概念等有了初步的感知。同时也给出了SpringData JPA与MyBatis的选择判断依据。
是Vzn呀
2022/07/14
1.9K0
Spring Data JPA系列2:快速在SpringBoot项目中熟练使用JPA
[翻译]Spring Boot,MySQL,JPA,Hibernate Restful CRUD API 教程
这篇文章是我准备用Java写一个RestAPI的时候,学习Spring boot用的。在看这篇文章的时候,我具备了用Python的Flask 和Golang 的beego 写应用的基础,并对MVC模式有很大的了解,同时,我也具有了Java的基础知识(虽然,仅仅是看了Java的基础书籍。)。所以,如果你并不具备以上的条件,你可能会有些看不懂。不过,我会尽量在翻译的时候夹带一些私货,以便能够让大家尽量能看懂。当然由于水平有限,翻译有可能不准确,请小伙伴们见谅,也请小伙伴们不吝斧正。另外,对于Java的又臭又长深有体会(毕竟作为Pythoner,Goer和半个swifter 更喜欢那些简洁的表达。由于想写Android应用,以及用Java编写后台应用的一条龙服务。当年还想用swift写后台应用,太天真了!Swift到现在写的还不如OC的性能,而且还大很多。)
用户2353021
2020/05/11
2K0
[翻译]Spring Boot,MySQL,JPA,Hibernate Restful CRUD API 教程
使用Spring Data 和 Spring Data JPA简化数据访问操作
在 Java 应用程序开发领域,如何高效简单的处理数据从来都是一个真正的挑战。但是,Spring Data的出现改变了这一现象,使得 Spring 应用程序中的数据任务变得轻而易举。在这篇文章中,我们将深入探讨 Spring Data、它的优点以及如何像专业人士一样使用它
用户4235284
2023/11/17
4550
jdbc java_Springdata
刚进公司,人生地不熟,偷偷藏着本《mybatis入土为安》,以为可以靠mybatis混的轻松点,谁知天有不测风云,大家用的是JPA。
全栈程序员站长
2022/11/01
1.1K0
jdbc java_Springdata
Jpa 中怎么玩一对多?
Jpa 中的一对一、一对多没搞明白的话,总会觉得有点绕,今天咱们来简单聊聊这个话题。 1. 一对一 比如说一个学校有一个地址,一个地址只有一个学校。 那么我们可以按照如下方式来设计类: @Data @Entity @Table(name = "t_address") public class Address {     @Id     @GeneratedValue(strategy = GenerationType.IDENTITY)     private Integer aid;     privat
江南一点雨
2022/03/04
8010
Maven工程搭建spring boot+spring mvc+JPA
1、maven工程,少不了pom.xml,spring boot的引入可参考官网:
JQ实验室
2022/02/09
4600
让 Restful API 更加 Simpler:Spring Data Rest
Spring Data REST 作为 Spring Data 项目的子集,开发者只需使用注解 @RepositoryRestResource 标记,就可以把整个 Repository 转换为 HAL 风格的 REST 资源,目前已支持 Spring Data JPA、Spring Data MongoDB、Spring Data Neo4j等等。
happyJared
2019/04/18
1.6K0
让 Restful API 更加 Simpler:Spring Data Rest
Spring Data JPA 介绍和使用
Spring Data JPA是Spring基于Hibernate开发的一个JPA框架。如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架几乎能做的任何事情。下面来逐步介绍它的强大功能。
乐百川
2022/05/05
3.7K0
SpringBoot 使用JPA操作数据库
       SpringDataJPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,底层使用了Hibernate的JPA技术实现。提供了基本CRUD操作。能够满足日常开发过程中对数据库访问的日常需求。特殊的查询还可以自定义查询语句。极简的配置就可以使用起来,极大的减少了开发者的负担。
芥末鱿鱼
2022/05/05
3930
推荐阅读
相关推荐
Spring Data JPA 的时间注解:@CreatedDate 和 @LastModifiedDate
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验