JPA中EntityListeners註解的使用

使用場景sql

EntityListeners在jpa中使用,若是你是mybatis是不能夠用的mybatis

它的意義架構

對實體屬性變化的跟蹤,它提供了保存前,保存後,更新前,更新後,刪除前,刪除後等狀態,就像是攔截器同樣,你能夠在攔截方法裏重寫你的個性化邏輯。併發

它的使用分佈式

定義某種功能類型ide

@Embeddable註解表示這個對象不是單獨的數據表,它裏面的字段會在其它實體中公用 /**高併發

  • 數據創建與更新.
  • Embeddable註解表示不會生成新的數據表,而它的屬性會在其它表內部,比較容易實現代碼複用. */ @Getter @Setter @Embeddable public class Audit {

@Column(name = "created_on") private LocalDateTime createdOn;性能

@Column(name = "created_by") private String createdBy;學習

@Column(name = "updated_on") private LocalDateTime updatedOn;this

@Column(name = "updated_by") private String updatedBy; } 定義接口,對上面類型進行讀和寫的行爲

/**

  • 數據創建與更新. */ public interface Auditable {

Audit getAudit();

void setAudit(Audit audit); } 定義跟蹤器,接口參數會在具體實現類中傳過來

/**

  • Hibernate 事件監聽器.

  • 實體監聽@EntityListeners(AuditListener.class). */ @Slf4j @Component @Transactional public class AuditListener { @PrePersist public void setCreatedOn(Auditable auditable) { Audit audit = auditable.getAudit();

    if (audit == null) { audit = new Audit(); auditable.setAudit(audit); }

    audit.setCreatedOn(LocalDateTime.now()); audit.setUpdatedOn(LocalDateTime.now()); }

@PreUpdate public void setUpdatedOn(Auditable auditable) { Audit audit = auditable.getAudit(); audit.setUpdatedOn(LocalDateTime.now()); } } 實體去實現這個對應的跟蹤接口

@Embedded註解表示它是一個內嵌到當前實體裏的對象,它本身不是實體,它只表示實體裏某些字段。 @EntityListeners(DataEntityListener.class) public class Product implements DataEntity { /**

  • 存儲複雜對象內的元素. */ @Embedded private Audit audit;

@Override public Audit getAudit() { return audit; }

@Override public void setAudit(Audit audit) { this.audit = audit; } } 上面代碼將實如今實體保存時對Audit實體裏的createdOn,updateOn進行賦值,當實體進行更新時對updateOn進行從新賦值的操做。

注意,在當前實體Product對應的數據表裏,它會有Audit類型裏的屬性,即它的數據表字段會有created_on,created_by,updated_on和updated_by等。 歡迎工做一到五年的Java工程師朋友們加入Java羣: 741514154 羣內提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用本身每一分每一秒的時間來學習提高本身,不要再用"沒有時間「來掩飾本身思想上的懶惰!趁年輕,使勁拼,給將來的本身一個交代!

相關文章
相關標籤/搜索