JPA中EntityListeners註解的使用

使用場景

EntityListeners在jpa中使用,如果你是mybatis是不可以用的

它的意義

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

它的使用

定義某種功能類型

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

  • 數據建立與更新.
  • Embeddable註解表示不會生成新的數據表,而它的屬性會在其它表內部,比較容易實現代碼複用.br/>*/
    @Getter
    @Setter
    br/>@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;

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

/**

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

    Audit getAudit();

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

/**

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

  • 存儲複雜對象內的元素.br/>*/
    @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等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章