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