記錄一個使用Spring Data JPA設置默認值的問題

Spring Data JPA設置默認值的問題

我有一個entity實體,其中裡面有一個佈爾類型的字段:

//entity table註解略
public class TableEntity { 
    private Boolean b; 
 public Boolean getB() {
        return b;
    }    
    public void setB(Boolean b) {
        this.b= b;
    }
}

然後現在是需要給這個佈爾型變量設默認值true

一開始經過百度,寫法是這樣的

//entity table註解略
public class TableEntity {
 @Column(name = "b", columnDefinition = "bit default 1", nullable = false)
    private Boolean b; 
 public Boolean getB() {
        return b;
    }    
    public void setB(Boolean b) {
        this.b= b;
    }
}

這個寫法其實應該沒什麼問題,當時的數據庫是sql server,但是在換環境部署,切換到MySQL的時候出瞭問題,被懷疑是我這裡寫的問題(其實我總感覺應該沒什麼關系)

於是改瞭第二版

//entity table註解略
public class TableEntity {
 @Column(name = "b", nullable = false)
    @org.hibernate.annotations.Type(type = "yes_no")
    private Boolean b = true; 
 public Boolean getB() {
        return b;
    }    
    public void setB(Boolean b) {
        this.b= b;
    }
}

直接把私有屬性值賦值,這也是通過百度之後,有部分文章說的一種方法,至於type那個註解,就是把佈爾型變量在數據庫中通過字符型變量來存儲,存儲”Y”或者”N”。

但是這個寫法,工程跑起來之後還是有問題的,存不上默認值,等於白寫。

在大佬的指點下,有瞭第三種寫法

//entity table註解略
public class TableEntity {
 @Column(name = "b", nullable = false)
    @org.hibernate.annotations.Type(type = "yes_no")
    private Boolean b = true; 
 public Boolean getB() {
        if(b==null) {
            return true;
        }
        return b;
    }    
    public void setB(Boolean b) {
        if(b==null) {
            return;
        }
        this.b= b;
    }
}

大概意思是,在JPA進行保存的時候框架內部會自己調用get/set方法來進行屬性賦值和取值,所以直接在get/set方法進行默認值的賦值就可以瞭。

實際測試效果拔群。

Jpa設置默認值約束

使用SpringDataJpa設置字段的默認值約束的2種方式

1、修改建表時的列定義屬性

@Column(columnDefinition="INT DEFAULT '1'")
private Integer status;

2、通過Hibernate(org.hibernate.annotations.ColumnDefault)

下提供的註解進行設置默認值

@ColumnDefault("1")
private Integer status;

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: