次のクラスを検討してください。このクラスは、OneToMany 関係Parent
でクラスのリストを保持し ます。Child
双方向の関係を確立したい場合は、親の子のリストに子を追加し、親を子に設定する必要があります。
親の子リストに子を追加するには、最初にすべての子のリストをロードする必要があります。子のリストが大きく、実際には子を必要としない場合、これは大きなオーバーヘッドになると思います。
サンプルコードを見てください。それを最適化できますか、それとも JPA はその種の操作の最適化に組み込まれていますか?
この例では EntityManager コードをスキップしましたが、コードが何をすべきかは明らかだと思います。
これはChild
クラスです:
@Entity
public class Child {
Parent parent;
@ManyToOne
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
}
これはParent
クラスです:
@Entity
public class Parent {
List<Child> children;
@OneToMany(mappedBy = "parent")
public List<Child> getChildren() {
return children;
}
public void setChildren(List<Child> children) {
this.children = children;
}
}
そして、このクラスは双方向の関係を設定します。
public class Tester {
public static void main(String[] args) {
// in a real application i would load that from the
// DB and it would maybe have already a lot of children
Parent parent = new Parent();
Child child = new Child(); //
// Set bidirectional relation
// Isn't this line a lot of overhead -> need to load all the children just to add an additional one?
parent.getChildren().add(child);
child.setParent(parent);
}
}