我想映射用户和ProteinData实体之间的一对一关系,但在我的用户实体中的setter中获得空指针异常。空指针在休眠实体的setter中的异常
我的主要服务代码Program.java
public class Program {
public static void main(String a[]){
Session session=HibernateUtility.getSessionFactory().openSession();
session.beginTransaction();
User user=new User();
user.addHistory(new UserHistory(new Date(),"set name to akku"));
user.setName("akku");
user.getProteinData().setTotal(234);
user.addHistory(new UserHistory(new Date(),"set goal to 234"));
session.save(user);
session.getTransaction().commit();
session.beginTransaction();
User loadedeUser=(User)session.get(User.class,1);
System.out.println(loadedeUser.getName());
System.out.println(loadedeUser.getProteinData().getGoal());
for(UserHistory history:loadedeUser.getHistory()){
//System.out.println("key is: "+ history.getKey());
System.out.println(history.getEntryTime().toString()+" "+history.getEntry());
}
loadedeUser.getProteinData().setTotal(loadedeUser.getProteinData().getTotal()+50);
loadedeUser.addHistory(new UserHistory(new Date(),"added 32 proteins"));
session.getTransaction().commit();
session.close();
HibernateUtility.getSessionFactory().close();
}
}
用户实体
public class User {
private int id;
private String name;
private ProteinData proteinData;
private List<UserHistory> history=new ArrayList<UserHistory>();
public User(){
setProteinData(new ProteinData());
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ProteinData getProteinData() {
return proteinData;
}
public void setProteinData(ProteinData proteinData) {
this.proteinData = proteinData;
try{
proteinData.setUser(this); //Null Pointer Exception here
}catch(Exception e){
e.printStackTrace();
}
}
public List<UserHistory> getHistory() {
return history;
}
public void setHistory(List<UserHistory> history) {
this.history = history;
}
public void addHistory(UserHistory historyItem){
historyItem.setUser(this);
history.add(historyItem);
}
}
ProteinData类
public class ProteinData {
private int id;
private User user;
private int total;
private int goal;
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getGoal() {
return goal;
}
public void setGoal(int goal) {
this.goal = goal;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
我创建了一个setter,用于在用户中设置值proteinData
变量,但通过我的setter传递proteinData.addUser(this)
我得到空指针异常
我该如何解决这个问题?
感谢
可能是蛋白质数据本身为空,并因此导致NPE每当你尝试解析蛋白质数据对象。检查您的proteinData是否已加载并且不为null! – hemanth 2014-12-02 11:18:21