我的表格父母和孩子之間有很多關係。JPA /休眠關係在一個方向上工作
這是部分從父類映射這種關係:
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "parents_children",
joinColumns = { @JoinColumn(name = "PARENT_ID", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "CHILD_ID", nullable = false, updatable = false) })
protected Set<Child> children = new HashSet<Child>();
這裏是我的孩子班上部分:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER, mappedBy = "children")
protected Set<Parent> parents;
現在,這個來自父方的作品時,我嘗試添加子項,如果我有一個子對象定義爲child
並且一個父對象定義爲parent
:
parent.getChildren().add(child);
這會在db中正確更新,並將表項保存到parents_children
表中。
但是,當我嘗試從另一端,從孩子我想setParent(s)。如果我有Set<Parent> parents
定義,我有我的Children
類中定義updateParents()
方法,我不得不從數據庫中定義爲child
加載一個孩子,我想這一點:
public void updateParents() {
Set<Parent> parents = //get this from somewhere
child.setParents(parents);
update();
}
這樣可不行,我試圖找出爲什麼。它會工作,如果我修改我的方法:
public void updateParents() {
Set<Parent> parents = //get this from somewhere
for (Parent parent : parents) {
parent.getChild().add(this);
}
}
我的關係定義做錯了嗎?我有一段時間沒有使用Java,並且在記住這一段時遇到了麻煩。
有人可以指出我做錯了什麼,所以我可以將父母添加到兒童對象?