ORM の双方向関係における「所有側」とは何ですか?また、それが重要である理由は何ですか?

Patricia Arquette
リリース: 2024-11-24 16:44:10
オリジナル
453 人が閲覧しました

What is the

ORM マッピングの「所有側」を理解する

オブジェクト リレーショナル マッピング (ORM) の領域では、エンティティ間の双方向の関係を次のことができます。リレーショナル データベースの一方向性の性質により、課題が生じます。これに対処するために、ORM は「所有側」の概念を導入し、データの永続性を合理化し、参照整合性を維持します。

所有側の定義

ORM マッピング。所有側は、データベース内の外部キー関係を管理するエンティティを指します。つまり、所有側は、関連テーブル内の外部キーへの変更を追跡および維持する責任があります。

マッピング例による説明

次のマッピング シナリオを考えてみましょう。

  • 1 対多: 1 対多の関係では、通常、所有者側には関連するエンティティのコレクションが含まれます。たとえば、Person エンティティと IdDocument エンティティのコレクション間のマッピングでは、person エンティティが所有側とみなされます。

    @Entity
    public class Person {
      @OneToMany(mappedBy="person")
      private List<IdDocument> idDocuments;
    }
    
    @Entity
    public class IdDocument {
      @ManyToOne
      private Person person;
    }
    ログイン後にコピー
  • 1 対 1 : 1 対多の関係と同様に、1 対 1 マッピングでは、通常、所有側に関連エンティティへの参照が含まれます。この場合、関係は一意であるため、どちらのエンティティも所有側として指定できます。

    @Entity
    public class Person {
      @OneToOne(mappedBy="person")
      private IdDocument idDocument;
    }
    
    @Entity
    public class IdDocument {
      @OneToOne
      private Person person;
    }
    ログイン後にコピー
  • 多対一:対 1 マッピングの場合、通常、所有側には関連エンティティへの外部キーが含まれます。 Student エンティティのコレクションと School エンティティの間のマッピングを考えてみましょう。 Student エンティティは、School エンティティへの参照を含む所有側になります。

    @Entity
    public class Student {
      @ManyToOne
      private School school;
    }
    
    @Entity
    public class School {
      @OneToMany(mappedBy="school")
      private List<Student> students;
    }
    ログイン後にコピー

所有側なしのマッピングの結果

所有側が双方向関係で明示的に宣言されていない場合、Hibernate はマッピングを容易にするために 3 番目の関連付けテーブルを作成します。これにより、不要なテーブルが急増し、データベースのパフォーマンスに影響を与える可能性があります。

結論

効果的な ORM マッピングには、所有側の概念を理解することが重要です。所有者側を正しく指定することで、開発者は効率的なデータの永続性を確保し、潜在的なデータ整合性の問題を回避できます。

以上がORM の双方向関係における「所有側」とは何ですか?また、それが重要である理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート