テーブルの親と子の間に多対多の関係があります。
これは、この関係をマッピングする Parent クラスの一部です。
@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
これは、1 つの Child オブジェクトが として定義され、1 つの Parent オブジェクトがとして定義されている場合、子を追加しようとすると親側から機能しますparent
。
parent.getChildren().add(child);
これはデータベースで正しく更新され、エントリがparents_children
テーブルに保存されます。
ただし、反対側からやろうとすると、子から親を設定したい。私がSet<Parent> parents
定義しupdateParents()
、クラス内で定義されたメソッドがあり、Children
定義されたdbから1つの子をロードし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 を使っていないので、これを思い出すのに苦労しています。
親を子オブジェクトに追加できるように、誰かが私が間違っていることを指摘できますか?