繁体   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