簡體   English   中英

getter / setter名稱格式上的空指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM