JPA中@CreatedDate和@LastModifiedDate的使用方式
前些時間寫了新項目,然后嘗試使用了Spring Data JPA,發(fā)現(xiàn)新世界。
很多功能都可以基于注解實現(xiàn),為開發(fā)省去了不少功夫。
關(guān)于時間的生成注解@CreatedDate和@LastModifiedDate的使用,在此記錄一下。
一、使用步驟
1.在實體類上加上注解 @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)。
如果有這方面的需求,可以參考下面的配置實現(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ù)實際業(yè)務(wù)情況獲取具體信息
return Optional.of(userName);
}
}
三、補充注解
Hibernate 也提供了類似上述時間注解的功能實現(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-08
IDEA的spring項目使用@Qualifier飄紅問題及解決
這篇文章主要介紹了IDEA的spring項目使用@Qualifier飄紅問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
從Hello?World開始理解GraphQL背后處理及執(zhí)行過程
這篇文章主要為大家介紹了從Hello?World開始理解GraphQL背后處理過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Java并發(fā)統(tǒng)計變量值偏差原因及解決方案
這篇文章主要介紹了Java并發(fā)統(tǒng)計變量值偏差原因及解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
Java項目Guava包?HashMultimap使用及注意事項
guava基本上可以說是java開發(fā)項目中,大概率會引入的包,今天介紹的主角是一個特殊的容器HashMultmap,可以簡單的將它的數(shù)據(jù)結(jié)構(gòu)理解為Map<K,?Set<V>>,今天主要介紹下基礎(chǔ)的知識點?HashMultmap級使用,感興趣的朋友一起看看吧2022-05-05
Spring Security注解方式權(quán)限控制過程
這篇文章主要介紹了Spring Security注解方式權(quán)限控制過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03

