注文と注文ラインがあるとします。 OrderとOrderLineの間に一方向のOneToManyを持たせることができます(OrderにはOrderLineのコレクションがあります)。あるいは、OrderLineとOrderの間にManyToOneアソシエーションを設定することもできます(OrderLineはそのOrderを参照します)。または、両方を持つことを選択できます。この場合、関連付けは双方向のOneToMany/ManyToOneの関連になります。
あなたが選択する解決策は、状況やエンティティ間の結合レベルによって大きく異なります。たとえば、ユーザー、会社、プロバイダーのすべてに多くのアドレスがある場合は、すべてのアドレスとアドレスの間に単方向性を持ち、アドレスに所有者のことを知らせないと意味があります。
ユーザーとメッセージがあるとします。ユーザーが何千ものメッセージを持つことができるとしたら、メッセージからユーザーへのManyToOneとしてのみモデル化するのは理にかなっています。とにかくユーザー。 JPQLクエリーは、関連付けをナビゲートすることでエンティティ間で結合するため、関連付けは双方向で行うこともできます。
双方向の関連付けでは、オブジェクトのグラフが矛盾していることがあります。たとえば、Order AにはOrderLinesの空のセットがありますが、OrderLinesの中にはOrder Aへの参照があります。JPAでは、所有者サイドであるアソシエーションの一方のサイドと、逆サイドである他方のサイドを常に持つようにしています。反対側はJPAによって無視されます。所有者側は、どのような関係が存在するかを決定する側です。 OneToMany双方向の関連付けでは、所有者側が多くの側でなければなりません。したがって、前の例では、所有者側はOrderLineとなり、JPAは行とAの間の関連付けを維持します。
このような関連付けは次のようにマップされます。オーダーラインにおける
@OneToMany(mappedBy = "parentOrder") // mappedBy indicates that this side is the
// inverse side, and that the mapping is defined by the attribute parentOrder
// at the other side of the association.
private Set<OrderLine> lines;
:順序で
@ManyToOne
private Order parentOrder;