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