getter / setter名称格式上的空指针

时间:2013-12-06 07:00:02

标签: java spring hibernate

我有一个实体。

@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,但我得到一个空指针异常。 生成空指针的代码

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。我认为这是一个休眠问题,与反射有关。帮我找到根

2 个答案:

答案 0 :(得分:0)

Does naming of getter/setter should be in proper format?

是的,Spring将使用变量名称以适当的格式搜索getter / setter。因为有许多方法可以声明getter / setter并依赖于用户,他/她想如何给出名字。

但很难为Spring搜索所有可能的getter / setter方法。因此它使用标准命名约定来访问变量。

答案 1 :(得分:0)

基本上,Hibernate将使用gette和setter方法来重新数据并将数据写入数据库。 Hibernate假定最终需要从数据库中读取写入数据库的任何内容。

现在在第一种情况下,当您尝试将对象保存到数据库hibernate调用

public void setData(Data data)

方法抛出反射( Hibernate将使用反射来访问setter )但是hibernate将不会获得此方法并将null保存到数据库中(检查表) 现在当你打电话

getData()

方法会将null值重新保存到数据库中并抛出Null Pointer Exception