2

Hibernate を使用する場合、1 対多/多対 1 の関係の所有側の適切な選択について少し混乱しています。この種の関係の 2 つの例を想像できます。

  1. Order/OrderLine のペアは最初の例です。このペアでは、オーダーが「マスター」の役割を果たします。結果としてすべてのアイテムを保存して、順序を保存したいとします。
  2. グループ/ユーザーのペアは 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一部の子を追加/削除してから、 (注文 - 注文明細) またはそれなし (グループ - ユーザー)で親をデータベースに永続化するのは正常ですか? 結局、ユーザーが所属しているグループをクリアしたり、アイテムを追加したり削除したりして順序を変更したりするなど、特定のアクションはどちらが担当するのでしょうか。

4

1 に答える 1