Hibernate を使用する場合、1 対多/多対 1 の関係の所有側の適切な選択について少し混乱しています。この種の関係の 2 つの例を想像できます。
- Order/OrderLine のペアは最初の例です。このペアでは、オーダーが「マスター」の役割を果たします。結果としてすべてのアイテムを保存して、順序を保存したいとします。
- グループ/ユーザーのペアは 2 番目の例です。このペアでは、ユーザーは「マスター」ロールを持っています。ユーザーを特定のグループに割り当てることで、ユーザーを保存することをお勧めします。
両方の例の内部構造は、次のように詳細を抽象化すると同じです。
public class Order/Group implements Serializable {
private Integer id;
private Set<OrderLine/User> children = new HashSet<OrderLine/User>();
}
public class OrderLine/User implements Serializable {
private Integer id;
private Order/Group parent;
}
休止状態の注釈マッピングはそれぞれ
@OneToMany(mappedBy = "parent")
@ManyToOne
@JoinColumn(name = "id", nullable = false)
論理的に OrderLine/User を所有側に残します。
上記のユースケースは、関係を所有する側の選択に何らかの影響を及ぼしますか? 所有側を逆にするか、カスケード オプションを使用して親を保存/削除するだけで十分でしょうか? orphanRemoval
一部の子を追加/削除してから、 (注文 - 注文明細) またはそれなし (グループ - ユーザー)で親をデータベースに永続化するのは正常ですか? 結局、ユーザーが所属しているグループをクリアしたり、アイテムを追加したり削除したりして順序を変更したりするなど、特定のアクションはどちらが担当するのでしょうか。