記錄一個使用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。
推薦閱讀:
- @TableName註解和@Table的區別及說明
- 關於@Entity和@Table註解的用法詳解
- 搭建簡單的Spring-Data JPA項目
- SpringBoot返回Json對象報錯(返回對象為空{})
- JPA如何設置表名和實體名,表字段與實體字段的對應