JPA中EntityListeners注解的使用詳解
使用場(chǎng)景
EntityListeners在jpa中使用,如果你是mybatis是不可以用的
它的意義
對(duì)實(shí)體屬性變化的跟蹤,它提供了保存前,保存后,更新前,更新后,刪除前,刪除后等狀態(tài),就像是攔截器一樣,你可以在攔截方法里重寫你的個(gè)性化邏輯。
它的使用
定義接口,如實(shí)體追蹤
/**
* 數(shù)據(jù)建立與更新.
*/
public interface DataEntity {
Timestamp getDateCreated();
void setDateCreated(Timestamp dateCreated);
Timestamp getLastUpdated();
void setLastUpdated(Timestamp lastUpdated);
Long getDateCreatedOn();
void setDateCreatedOn(Long dateCreatedOn);
Long getLastUpdatedOn();
void setLastUpdatedOn(Long lastUpdatedOn);
}
定義跟蹤器
@Slf4j
@Component
@Transactional
public class DataEntityListener {
@PrePersist
public void prePersist(DataEntity object)
throws IllegalArgumentException, IllegalAccessException {
Timestamp now = Timestamp.from(Instant.now());
object.setDateCreated(now);
object.setLastUpdated(now);
logger.debug("save之前的操作");
}
@PostPersist
public void postpersist(DataEntity object)
throws IllegalArgumentException, IllegalAccessException {
logger.debug("save之后的操作");
}
@PreUpdate
public void preUpdate(DataEntity object)
throws IllegalArgumentException, IllegalAccessException {
Timestamp now = Timestamp.from(Instant.now());
object.setLastUpdated(now);
logger.debug("update之前的操作");
}
@PostUpdate
public void postUpdate(DataEntity object)
throws IllegalArgumentException, IllegalAccessException {
logger.debug("update之后的操作");
}
@PreRemove
public void preRemove(DataEntity object) {
logger.debug("del之前的操作");
}
@PostRemove
public void postRemove(DataEntity object) {
logger.debug("del之后的操作");
}
}
實(shí)體去實(shí)現(xiàn)這個(gè)對(duì)應(yīng)的跟蹤接口
@EntityListeners(DataEntityListener.class)
public class Product implements DataEntity {
@Override
public Timestamp getDateCreated() {
return createTime;
}
@Override
public void setDateCreated(Timestamp dateCreated) {
createTime = dateCreated;
}
@Override
public Timestamp getLastUpdated() {
return lastUpdateTime;
}
@Override
public void setLastUpdated(Timestamp lastUpdated) {
this.lastUpdateTime = lastUpdated;
}
@Override
public Long getDateCreatedOn() {
return createOn;
}
@Override
public void setDateCreatedOn(Long dateCreatedOn) {
createOn = dateCreatedOn;
}
@Override
public Long getLastUpdatedOn() {
return lastUpdateOn;
}
@Override
public void setLastUpdatedOn(Long lastUpdatedOn) {
this.lastUpdateOn = lastUpdatedOn;
}
}
上面代碼將實(shí)現(xiàn)在實(shí)體保存時(shí)對(duì) createTime , lastUpdateTime 進(jìn)行賦值,當(dāng)實(shí)體進(jìn)行更新時(shí)對(duì) lastUpdateTime 進(jìn)行重新賦值的操作。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java集合框架迭代器Iterator實(shí)現(xiàn)原理解析
這篇文章主要介紹了Java集合框架迭代器Iterator實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
java實(shí)現(xiàn)gif動(dòng)畫效果(java顯示動(dòng)態(tài)圖片)
這篇文章主要介紹了java實(shí)現(xiàn)gif動(dòng)畫效果示例(java顯示動(dòng)態(tài)圖片),需要的朋友可以參考下2014-04-04
java.lang.Long cannot be cast to ja
本文主要介紹了java.lang.Long cannot be cast to java.lang.Integer數(shù)據(jù)類型轉(zhuǎn)換異常解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
MyBatisPlus中@TableField注解的基本使用
這篇文章主要介紹了MyBatisPlus中@TableField注解的基本使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringCloud Config分布式配置中心使用教程介紹
springcloud config是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了 client和server兩個(gè)部分,server端提供配置文件的存儲(chǔ)、以接口的形式將配置文件的內(nèi)容提供出去,client端通過接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用2022-12-12

