2

多対多の関係を持つ 2 つのエンティティを設計するためのより良い方法を理解しようとしていますか? データベースには、これら 2 つのエンティティ間に接続テーブルがあります。しかし、エンティティを作成するときに同じアプローチに従う必要がありますか?

例: ユーザー対ユーザーグループ

ユーザーは複数のグループに所属することができ、グループには複数のユーザーが含まれる場合があります。

リレーショナル データベースには、User、User2Group、Group のような 3 つのテーブルがあります。

したがって、JPA エンティティを作成する場合、適切な注釈 (@ManytoMany) を指定して、3 つのテーブルに対して 3 つのエンティティを作成するか、2 つのエンティティのみを作成する必要があります。

私はJPAが初めてなので、次の観点から良い面と悪い面を理解しようとしています:

  1. パフォーマンス
  2. コードのメンテナンス

ありがとう、あなたの入力は大歓迎です。

4

1 に答える 1

6

いいえ、結合テーブルをエンティティとしてマップする必要はありません。ManyToMany アノテーションを使用するだけです。

public class User {
    ...
    @ManyToMany
    private Set<Group> groups;
}

public class Group {
    ...
    @ManyToMany(mappedBy = "groups")
    private Set<User> users;
}

結合テーブルが純粋な結合テーブルでない場合、つまり、ユーザーがグループに参加した日付などの追加情報がある場合にのみ、結合テーブルをエンティティとしてマップする必要があります。

マッピングはパフォーマンスにほとんど影響しません。重要なのは、エンティティの使用方法とクエリ方法、およびデータベースの設計方法 (インデックスなど) です。

于 2012-11-28T08:05:19.293 に答える