spring boot JPA中實體類經常使用註解

spring boot jpa中的註解不少,參數也比較多。不必所有記住,可是常常查看官方文檔也比較麻煩,記錄一下一些經常使用的註解。經過一些具體的例子來幫助記憶。java

@Entity
@Table(name = "flow")
@SQLDelete(sql = "update flow set deleted = 1 where id = ?")
@Where(clause = "deleted = 0")
public class Flow {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(updatable = false)
private Date createTime;
private Date operateTime;
@PrePersist
protected void onCreate() {
createTime = new Date();
}
@PreUpdate
protected void onUpdate() {
operateTime = new Date();
}
@Column(columnDefinition = "TEXT")
private String message;
private deleted = 0;
}

  

一、Entity 表示這個類是一個實體類,對應數據庫中的一個表spring

二、@Table 指定這個類對應數據庫中的表名。若是這個類名的命名方式符合數據庫的命名方式,能夠省略這個註解。如FlowType類名對應表名flow_type。sql

三、@Id 指定這個字段爲表的主鍵數據庫

四、@GeneratedValue(strategy=GenerationType.IDENTITY) 指定主鍵的生成方式,通常主鍵爲自增的話,就採用GenerationType.IDENTITY的生成方式app

五、@Column(updatable = false) @Columun 註解針對一個字段,對應表中的一列。有不少參數,name表示對應數據表中的字段名。insertable 表示插入式是否更新。updateable,表示update的時候是否更新;columnDefinition表示字段類型,當使用jpa自動生成表的時候比較有用。blog

六、@PrePersist 表示持久化以前執行繼承

七、@PreUpdate 表示執行Update操做以前執行。文檔

八、SQLDelete表示當執行jpa中的delete操做時,執行的語句it

九、@Where 當執行查詢語句時,會附帶這個條件。這個和上面的一塊兒使用,能夠實現軟刪除io

上述代碼表示數據庫中有一個表名爲flow的表。主鍵爲id,爲自增。createTime爲建立時間,當第一次插入的時候產生時間,後續不會隨着update變更。而operateTime僅在Update的時候更新。message是String類型,默認建立的字段爲Varchar類型,這裏指定爲TEXT。

 

咱們建立數據庫的時候,推薦每一個表都要有建立時間和更新時間,可是不必每一個表都寫重複的代碼,能夠用下面的註解來解決

 

@MappedSuperclass
public class BaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    protected Long id;

    @Column(updatable = false)
    private Date createTime;
    private Date updateTime;

    @PrePersist
    protected void onCreate() {
        createTime = new Date();
    }

    @PreUpdate
    protected void onUpdate() {
        updateTime = new Date();
    }

  

十、@MappedSuperclass 表示一個這是一個父類,不會被當成一個實體類。在這裏定義一些表中的通用字段。而後其餘實體類繼承這個類就能夠了,避免寫重複代碼。

相關文章
相關標籤/搜索