spring boot JPA中實體類常用注解


spring boot jpa中的注解很多,參數也比較多。沒必要全部記住,但是經常查看官方文檔也比較麻煩,記錄一下一些常用的注解。通過一些具體的例子來幫助記憶。

@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;
}

  

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

2、@Table 指定這個類對應數據庫中的表名。如果這個類名的命名方式符合數據庫的命名方式,可以省略這個注解。如FlowType類名對應表名flow_type。

3、@Id 指定這個字段為表的主鍵

4、@GeneratedValue(strategy=GenerationType.IDENTITY) 指定主鍵的生成方式,一般主鍵為自增的話,就采用GenerationType.IDENTITY的生成方式

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

6、@PrePersist 表示持久化之前執行

7、@PreUpdate 表示執行Update操作之前執行。

8、SQLDelete表示當執行jpa中的delete操作時,執行的語句

9、@Where 當執行查詢語句時,會附帶這個條件。這個和上面的一起使用,可以實現軟刪除

上述代碼表示數據庫中有一個表名為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();
    }

  

10、@MappedSuperclass 表示一個這是一個父類,不會被當成一個實體類。在這里定義一些表中的通用字段。然后其他實體類繼承這個類就可以了,避免寫重復代碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM