[英]Null pointer on getter/ setter name format
我有一個實體。
@Entity
@Table(name = "TABLE_NAME")
public class someName implements Serializable{
....
...
@ManyToOne
@JoinColumn(name="some", referencedColumnName="some_ID", updatable = false)
private Data data;
//corresponding getter and setter
public Data getData() {
return data;
}
public void setDataTYPE(Data data) { //this name is not in proper format
this.data = data;
}
}
現在,當我對此實體對象執行getData時,盡管對象不為null,但我得到了null指針異常。 生成空指針的代碼
if(someNameOBJ==null){
//Do something
}else{
sysout(someNameOBJ.getData.getId);// It generates NPE
}
但是當我將getter / setter更改為正確的格式(從eclipse生成)時,空指針消失了。
public Data getData() {
return data;
}
public void setData(Data data) { //this name is in proper format
this.data = data;
}
為什么在這種情況下空指針不可用? getter / setter的命名應采用正確的格式嗎? 如果可以,為什么? 我知道Java Bean的命名約定,但是函數名稱有什么區別。 (因為我一直擔心函數的功能,而不是函數的名稱)。 我正在使用hibernate和spring 3,java 1.6。 我認為這是一個休眠的問題,與反思有關。 幫我找到根
Does naming of getter/setter should be in proper format?
是的, Spring
將以正確的格式搜索帶有變量名的getter / setter。 因為有多種可能的方法來聲明getter / setter且取決於用戶,所以他/她希望如何命名。
但是很難為Spring搜索所有可能的getter / setter方法。 因此,它使用標准命名約定來訪問變量。
基本上,Hibernate將使用gette和setter方法從數據庫讀取數據或將數據寫入數據庫。 Hibernate假定最終寫入數據庫的所有內容都需要從數據庫中讀取。
現在在第一種情況下,當您嘗試將對象保存到數據庫休眠調用時
public void setData(Data data)
方法拋出反射( Hibernate將使用反射來訪問setter ),但是當您調用時,hibernate不會獲取此方法並將空值保存到數據庫中(檢查表)
getData()
方法,它將重新調整保存到數據庫中的null
值並引發Null Pointer Exception
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.