Looking for jpa Answers? Try Ask4KnowledgeBase
Looking for jpa Keywords? Try Ask4Keywords

jpa多対多マッピング


前書き

ManyToManyマッピングは、エンティティ間の関係を記述します。エンティティ間の関係は、相互に複数のインスタンスに関連付けることができ、 @ManyToManyアノテーションで定義されます。

エンティティのテーブル内の外部キー列が使用できる@OneToManyとは異なり、 ManyToManyはエンティティを相互にマップする結合テーブルが必要です。

パラメーター

注釈目的
@TableGenerator GeneratedValueアノテーションにジェネレータ要素が指定されたときに、名前で参照される主キージェネレータを定義します
@GeneratedValue 主キーの値の生成戦略の指定を提供します。 Idアノテーションと共に、エンティティまたはマップされたスーパークラスのプライマリキーのプロパティまたはフィールドに適用できます。
@ManyToMany 多くの従業員が複数のプロジェクトで作業できるように、従業員とプロジェクトのエンティティ間の関係を指定します。
mappedBy="projects" 従業員とプロジェクトの間の双方向の関係を定義する
@JoinColumn 関連の所有者とみなされるエンティティを参照する列の名前を指定します。
@JoinTable 外部キーを使用して従業員とプロジェクトの関係を保持するデータベース内のテーブルを指定します。

備考

  • @TableGeneratorと@GeneratedValueは、jpaテーブルジェネレータを使用した自動ID作成に使用されます。
  • @ManyToManyアノテーションは、従業員とプロジェクトエンティティの関係を指定します。
  • @JoinTableは、joinテーブルjpaとして使用するテーブルの名前を指定します.name = "employee_project"を使用してEmployeeとProjectの間の多対多のマッピング。これは、データベーステーブルに他のテーブルを参照するための外部キーが含まれていないため、jpa多対多マッピングの所有権を判断する方法がないために行われます。
  • @JoinColumnは、関連の所有者とみなされるエンティティを参照する列の名前を指定し、@inverseJoinColumnは関係の逆側の名前を指定します。 (あなたは所有者とみなされるように任意の面を選ぶことができます。ここではEmployeeをオーナーとして選択していますので、@JoinColumnはemployee_projectというジョインテーブルのidemployeeカラムを参照し、@InverseJoinColumnはjpaの逆側のidprojectを参照します。
  • Projectエンティティの@ManyToManyアノテーションは逆の関係を示しますので、mappedBy = projectsを使用してEmployeeエンティティのフィールドを参照します。

完全な例はここで参照できます

多対多マッピング 関連する例