JPA中@CreatedDate和@LastModifiedDate的使用方式
前些時間寫了新項目,然后嘗試使用了Spring Data JPA,發(fā)現(xiàn)新世界。
很多功能都可以基于注解實(shí)現(xiàn),為開發(fā)省去了不少功夫。
關(guān)于時間的生成注解@CreatedDate
和@LastModifiedDate
的使用,在此記錄一下。
一、使用步驟
1.在實(shí)體類上加上注解 @EntityListeners(AuditingEntityListener.class)
,在相應(yīng)的字段上添加對應(yīng)的時間注解 @LastModifiedDate
和 @CreatedDate
。
注意:日期的類型可以使用Date
,也可以使用Long
。我一般習(xí)慣用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; /** * 創(chuàng)建時間 */ @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
注解,用于保存和更新當(dāng)前操作用戶的信息(如id、name)。
如果有這方面的需求,可以參考下面的配置實(shí)現(xiàn),代碼如下:
@Data @Entity @EntityListeners(AuditingEntityListener.class) public class Task { /** * 自增主鍵 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; /** * 創(chuàng)建時間 */ @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; /** * 創(chuàng)建人 */ @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> { /** * 返回操作員標(biāo)志信息 * * @return */ @Override public Optional<String> getCurrentAuditor() { // 這里應(yīng)根據(jù)實(shí)際業(yè)務(wù)情況獲取具體信息 return Optional.of(userName); } }
三、補(bǔ)充注解
Hibernate 也提供了類似上述時間注解的功能實(shí)現(xiàn),這種方法只需要一步配置,更改為注解 @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; }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java讀取cvs文件并導(dǎo)入數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了java讀取cvs文件并導(dǎo)入數(shù)據(jù)庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08IDEA的spring項目使用@Qualifier飄紅問題及解決
這篇文章主要介紹了IDEA的spring項目使用@Qualifier飄紅問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11從Hello?World開始理解GraphQL背后處理及執(zhí)行過程
這篇文章主要為大家介紹了從Hello?World開始理解GraphQL背后處理過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08springboot中縮短一個url鏈接的實(shí)現(xiàn)
縮短 URL 是現(xiàn)代應(yīng)用程序中常見的需求,通常用于減少長 URL 的長度,使其更易于分享,URL 縮短服務(wù)的核心思路是將長 URL 映射到一個唯一的短代碼,本文主要介紹了springboot中縮短一個url鏈接的實(shí)現(xiàn),感興趣的可以了解一下2024-09-09Java并發(fā)統(tǒng)計變量值偏差原因及解決方案
這篇文章主要介紹了Java并發(fā)統(tǒng)計變量值偏差原因及解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06Java項目Guava包?HashMultimap使用及注意事項
guava基本上可以說是java開發(fā)項目中,大概率會引入的包,今天介紹的主角是一個特殊的容器HashMultmap,可以簡單的將它的數(shù)據(jù)結(jié)構(gòu)理解為Map<K,?Set<V>>,今天主要介紹下基礎(chǔ)的知識點(diǎn)?HashMultmap級使用,感興趣的朋友一起看看吧2022-05-05Spring Security注解方式權(quán)限控制過程
這篇文章主要介紹了Spring Security注解方式權(quán)限控制過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03