我想其中有孩子實體的集合(childHistory),也是一個指針,最後添加的孩子(currentChild)映射到一個子表兩次 - @OneToMany和@ManyToOne
class Parent {
//unidirectional
@OneToOne(cascade = CascadeType.PERSIST, optional = false)
@JoinColumn(name = "current_child_id")
private Child currentChild;
//bidirectional
@OneToMany(mappedBy = "parent")
private List<Child> childHistory;
public Parent() {
currentChild = new Child(this);
childHistory = new ArrayList<>();
childHistory.add(currentChild);
}
public void add() {
currentChild = new Child(this);
childHistory = new ArrayList<>();
childHistory.add(currentChild);
}
}
class Child {
@ManyToOne(optional = false)
@JoinColumn(name = "parent_id")
private Parent parent;
public Child(Parrent parent) {
this.parent = parent;
}
}
父實體模型
當我嘗試保存父級(並依靠級聯來堅持子級)時,我目前得到了暫時實體的異常。由於我在Parent ctor中啓動了所有內容,因此我無法事先保存Parent。
警告(即導致異常...):
警告:HHH000437:試圖保存有未保存的瞬態實體 非空的關聯的一個或多個實體。未保存的臨時實體必須在保存這些依賴實體之前的操作中保存。未保存的臨時實體:
([com.Parent#<null>])
相關實體:([[com.Child#<null>]])
非空的 協會(S):([com.Child.entity])
警告:HHH000437:試圖保存有 非空的關聯的一個或多個實體與未保存的瞬態實體。未保存的臨時實體必須在保存這些依賴實體之前的操作中保存。未保存的臨時實體:
([com.Child#<null>])
相關實體:([[com.Parent#<null>]])
非空的 協會(S):([com.Parent.currentChild])
有沒有一種方法來正確模擬這一點,並有休眠NOT NULL數據庫列。
編輯:對於一個攝製看到這個要點:https://gist.github.com/jlogar/2da2237640aa013f2cfbda33a4a5dc84
你如何保存你的實體 –
'em.persist(新父());' 我省略了一些給定的細節(id,entitymanager,...) –
你可以分享你的服務 –