ホームページ  >  記事  >  Java  >  Hibernate は多対多のマッピング関係をどのように処理しますか?

Hibernate は多対多のマッピング関係をどのように処理しますか?

WBOY
WBOYオリジナル
2024-04-17 17:33:021058ブラウズ

Hibernate で多対多のマッピング関係を実装するには、@ManyToMany アノテーションを使用する方法、ユニオン テーブルを使用する方法、および関連付けテーブルを使用する方法の 3 つがあります。この例では、@ManyToMany アノテーションが使用され、EntityB のマッピングに関連付けられたフィールドを指定するために EntityA で mappedBy 属性が使用され、EntityA との多対多のマッピング関係を表すために EntityB で @ManyToMany アノテーションが使用されます。 。

Hibernate 如何处理多对多映射关系?

#Hibernate の多対多マッピング関係処理メソッド

概要

Hibernate は、Java オブジェクトとリレーショナル データベース間のマッピングのためのオブジェクト リレーショナル マッピング (ORM) フレームワークです。多対多のマッピングは、1 つのエンティティを複数のエンティティに関連付けたり、その逆を行うことができる関係の一種です。

多対多マッピングの実装

Hibernate では、

@ManyToMany アノテーションを使用して多対多マッピングを実現できます。以下に示すように:

// EntityA.java
@Entity
public class EntityA {
    @Id
    private Long id;

    @ManyToMany(mappedBy = "entitiesA")
    private Set<EntityB> entitiesB;
}

// EntityB.java
@Entity
public class EntityB {
    @Id
    private Long id;

    @ManyToMany
    private Set<EntityA> entitiesA;
}

EntityA の

entitiesB フィールドは、EntityA に関連付けられた EntityB のコレクションを表します。 mappedBy 属性は、このマップに関連付けられた EntityB 内のフィールドを指定します。 EntityB では、entitiesA フィールドは、EntityB に関連付けられた EntityA のコレクションを表します。

実践例

質問: 学生と家庭教師のシステムがあると仮定します。各生徒に複数の講師を付けることができ、各講師が複数の生徒を教えることができます。この関係を表すように Hibernate マッピングを設計します。

解決策:

// Student.java
@Entity
public class Student {
    @Id
    private Long id;
    private String name;

    @ManyToMany(mappedBy = "students")
    private Set<Tutor> tutors;
}

// Tutor.java
@Entity
public class Tutor {
    @Id
    private Long id;
    private String name;

    @ManyToMany
    private Set<Student> students;
}

注:

  • Student エンティティでは、 tutors フィールドは、生徒に関連付けられた講師のコレクションを表します。 mappedBy 属性は、このマップに関連付けられた Tutor エンティティ内のフィールドを指定します。
  • Tutor エンティティの students フィールドは、講師に関連付けられた生徒のコレクションを表します。

以上がHibernate は多対多のマッピング関係をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。