2017-12-02 113 views
0

爲了簡單起見,事件具有地址,許多事件可以共享相同的地址。所以我有一個ManyToOne關係。Java/Hibernate:非空屬性引用空值或瞬態值

活動類(我刪除了可讀性不相關的代碼)

@Entity 
@Table(name = "events") 
public class Event { 

    private Address address; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "address_id", nullable = false) 
    public Address getAddress() { 
     return this.address; 
    } 
} 

地址類

@Entity 
@Table(name = "adresses") 
public class Address { 

    private Set<Event> events = new HashSet<Event>(0); 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "address") 
    public Set<Event> getEvents() { 
     return this.events; 
    } 


} 

當我取ID爲6的事件,並嘗試將其刪除:

Event e = session.get(Event.class, 6); 
session.delete(e); 

我得到的錯誤not-null property references a null or transient value : logic.Event.address

但由於地址不初始化它既不瞬態因爲我從數據庫中檢索它,也沒有空:

Event e = session.get(Event.class, 6); 
System.out.println(e.getAddress().getAddressId()); //Output is 3, which is correct 

我不知道爲什麼發生這種情況,大多數人同樣的問題試圖保存一個暫時的對象,這根本不是我的情況。

+0

*沒有設置因爲我不需要它* !!但你需要它,所以映射是正確的。 –

+0

@chsdk真的嗎???????這是否導致「空」錯誤?笑 –

+0

是的,這應引起貼圖錯誤,我認爲thta就是爲什麼你得到了'非空屬性引用null或瞬時value'。 –

回答

0

拆卸cascade註解我所有的@ManyToOne側實體解決我的問題。如果有人有解釋,請隨時評論!

相關問題