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設(shè)計(jì)模式編程中模板方法模式的運(yùn)用實(shí)例
這篇文章主要介紹了Java設(shè)計(jì)模式編程中模板方法模式的運(yùn)用實(shí)例,模板方法模式強(qiáng)調(diào)基于繼承的代碼復(fù)用,需要的朋友可以參考下2016-05-05
springboot+dubbo+zookeeper的簡(jiǎn)單實(shí)例詳解
本文主要介紹了springboot+dubbo+zookeeper的簡(jiǎn)單實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Java線程的start方法回調(diào)run方法的操作技巧
面試過(guò)程中經(jīng)常會(huì)被面試官問(wèn)到為什么我們調(diào)用start()方法時(shí)會(huì)執(zhí)行run()方法,為什么不能直接調(diào)用run()方法,問(wèn)的一頭霧水,今天小編給大家介紹下Java線程的start方法回調(diào)run方法的操作技巧,需要的朋友參考下吧2017-11-11
java觀察者模式的三種實(shí)現(xiàn)方式代碼實(shí)例
這篇文章主要介紹了java觀察者模式的三種實(shí)現(xiàn)方式代碼實(shí)例,觀察者模式(又被稱為發(fā)布-訂閱(Publish/Subscribe)模式,屬于行為型模式的一種,它定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一個(gè)主題對(duì)象,需要的朋友可以參考下2023-10-10
簡(jiǎn)單談?wù)凧ava遍歷樹(shù)深度優(yōu)先和廣度優(yōu)先的操作方式
這篇文章主要介紹了簡(jiǎn)單談?wù)凧ava遍歷樹(shù)深度優(yōu)先和廣度優(yōu)先的操作方式的相關(guān)資料,需要的朋友可以參考下2023-03-03
淺談hibernate急迫加載問(wèn)題(多重外鍵關(guān)聯(lián))
這篇文章主要介紹了淺談hibernate急迫加載問(wèn)題(多重外鍵關(guān)聯(lián)),具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
單機(jī)redis分布式鎖實(shí)現(xiàn)原理解析
這篇文章主要介紹了單機(jī)redis分布式鎖實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Spring JPA學(xué)習(xí)之delete方法示例詳解
這篇文章主要為大家介紹了Spring JPA學(xué)習(xí)delete方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

