我想映射用戶和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