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
我不知道爲什麼發生這種情況,大多數人同樣的問題試圖保存一個暫時的對象,這根本不是我的情況。
*沒有設置因爲我不需要它* !!但你需要它,所以映射是正確的。 –
@chsdk真的嗎???????這是否導致「空」錯誤?笑 –
是的,這應引起貼圖錯誤,我認爲thta就是爲什麼你得到了'非空屬性引用null或瞬時value'。 –