狀況描述:
寫Java 使用 Hibernate , ORM方式接MySQL資料庫
當Code跑到負責與MySQL table 對接的類別中將table內的值轉移到此類別的物件就會跳出
Null value was assigned to a property of primitive type setter of xxx
P.S xxx 是負責映射table類別中的屬性
而映射table的類別為以下:
@Entity
@Table(name = "table", catalog = "database")
@DynamicInsert
public class table implements java.io.Serializable {
private float floatNumber;
public table() {
}
@Column(name = "floatNumber", precision = 8, scale = 2)
public float getFloatNumber() {
return floatNumber;
}
public void setFloatNumber(float floatNumber) {
this.floatNumber = floatNumber;
}
}
原因:
database 裡的floatNumber這個屬性的type 是 float (8 , 4) , 而且設定為default null
可以放null屬性的
但是java 的float 是基本類型, 沒辦法丟null給他
當資料庫的值是null然後要映射將資料匯入至物件時就會出錯
解決方法很簡單,
直接改成以下:
@Entity
@Table(name = "table", catalog = "database")
@DynamicInsert
public class table implements java.io.Serializable {
private Float floatNumber;
public table() {
}
@Column(name = "floatNumber", precision = 8, scale = 2)
public Float getFloatNumber() {
return floatNumber;
}
public void setFloatNumber(Float floatNumber) {
this.floatNumber = floatNumber;
}
}
直接使用Wrapper類別當作屬性的類型
這樣一來從資料庫取值時設定為null也不會吃錯
如果要計算時也會自動轉型, 至於如果有null的話再寫檢查式即可