Null value was assigned to a property of primitive type setter of xxx 解決辦法

  • 218
  • 0

 

 

狀況描述:

寫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的話再寫檢查式即可