2013-06-04 80 views
-2

我有兩個與@OneToMany關係的實體。問題是我在保存期間在行getComps().add(comp)上得到一個空指針。如果我明確實例化comps集,它會正常工作。您可能知道,如果您有註釋,則不需要。我在該實體中有其他對象,可以在沒有明確實例化的情況下正常工作。可能的原因是什麼?JPA2使用@OneToMany關係保存實體時的NullPointerException

//Main Method  
public static void main(String argz[]){ 
    .... 
    Message message = new Message(); 
    message.setMessage("Hello World!"); 
    Comp comp = new Comp(); 
    comp.setName(getName()); 
    message.addComp(comp); 
    user.createMessage(message); 
    User aUser = userService.save(user); 
} 

//Message Entity 
@JsonIgnore 
@OneToMany(targetEntity = Comp.class, 
       mappedBy="message", 
       fetch=FetchType.LAZY, 
       cascade={CascadeType.All}, 
       orphanRemoval=true) 
private Set<Comp> comps; 

public void addComp(Comp comp){ 
    comp.setMessage(this); 
    getComps().add(comp); 
} 

//Comp Entity  
@JsonIgnore 
@JsonBackReference 
@ManyToOne(cascade=CascadeType.PERSIST) 
@JoinColumn(name="message_id") 
private Message message; 
+0

我們證明您是執行代碼。你的期望可能是錯誤的。 –

+0

我已經包含了我用於測試的測試儀方法。見上面 –

+0

不需要熟悉Hibernate來回答這樣的問題。您正在實例化一組消息,其中的消息組爲空,然後您嘗試向此組添加一個Comp。 Hibernate與你的錯誤沒有任何關係。您無法在空引用上調用方法,就這些。你應該接受羅馬的答案。 –

回答

1

異常的原因是在代碼

private Set<Comp> comps; 

變化

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "message") 
private Set<Comp> comps = new HashSet<Comp>(0); 

public Set<Comp> getComps() { 
    return this.comps; 
} 

public void setComps(Set<Comp> comps) { 
    this.comps = comps; 
}