パッケージ jakarta.persistence

アノテーション型 ManyToMany


  • @TargetSE({METHODSE,FIELDSE})
    @RetentionSE(RUNTIMESE)
    public @interface ManyToMany
    多対多の多重度を持つ多値の関連付けを指定します。

    すべての多対多の関連付けには、所有側と非所有(逆)側の 2 つの側面があります。結合テーブルは所有側で指定されます。関連付けが双方向の場合、どちらの側も所有側として指定できます。関連が双方向の場合、非所有側は ManyToMany アノテーションの mappedBy 要素を使用して、所有側の関連フィールドまたはプロパティを指定する必要があります。

    関連の結合テーブルは、デフォルトではない場合、所有側で指定されます。

    ManyToMany アノテーションは、エンティティクラスに含まれる埋め込み可能なクラス内で使用して、エンティティのコレクションとの関連を指定できます。関連が双方向で、埋め込み可能クラスを含むエンティティが関連の所有者である場合、非所有側は ManyToMany アノテーションの mappedBy 要素を使用して、埋め込み可能クラスの関連フィールドまたはプロパティを指定する必要があります。mappedBy 要素でドット("." )表記構文を使用して、埋め込み属性内の関連属性を示す必要があります。ドット表記で使用される各識別子の値は、それぞれの埋め込みフィールドまたはプロパティの名前です。

    
        Example 1:
    
        // In Customer class:
    
        @ManyToMany
        @JoinTable(name="CUST_PHONES")
        public Set<PhoneNumber> getPhones() { return phones; }
    
        // In PhoneNumber class:
    
        @ManyToMany(mappedBy="phones")
        public Set<Customer> getCustomers() { return customers; }
    
        Example 2:
    
        // In Customer class:
    
        @ManyToMany(targetEntity=com.acme.PhoneNumber.class)
        public Set getPhones() { return phones; }
    
        // In PhoneNumber class:
    
        @ManyToMany(targetEntity=com.acme.Customer.class, mappedBy="phones")
        public Set getCustomers() { return customers; }
    
        Example 3:
    
        // In Customer class:
    
        @ManyToMany
        @JoinTable(name="CUST_PHONE",
            joinColumns=
                @JoinColumn(name="CUST_ID", referencedColumnName="ID"),
            inverseJoinColumns=
                @JoinColumn(name="PHONE_ID", referencedColumnName="ID")
            )
        public Set<PhoneNumber> getPhones() { return phones; }
    
        // In PhoneNumberClass:
    
        @ManyToMany(mappedBy="phones")
        public Set<Customer> getCustomers() { return customers; }
     
    導入:
    1.0
    関連事項:
    JoinTable
    • オプション要素のサマリー

      オプション要素  
      修飾子と型 オプションの要素 説明
      CascadeType[]cascade
      (オプション)関連付けのターゲットにカスケードする必要がある操作。
      FetchTypefetch
      (オプション)関連付けを遅延ロードするか、積極的にフェッチする必要があるか。
      StringSEmappedBy
      関連を所有するフィールド。
      ClassSEtargetEntity
      (オプション)関連付けのターゲットであるエンティティクラス。
    • 要素の詳細

      • targetEntity

        ClassSE targetEntity
        (オプション)関連付けのターゲットであるエンティティクラス。コレクション値の関連プロパティが Java ジェネリクスを使用して定義されている場合のみオプションです。それ以外の場合は指定する必要があります。

        ジェネリクスを使用して定義されている場合、デフォルトはコレクションのパラメーター化された型です。

        デフォルト:
        void.class
      • cascade

        CascadeType[] cascade
        (オプション)関連付けのターゲットにカスケードする必要がある操作。

        ターゲットコレクションが java.util.MapSE の場合、cascade 要素はマップ値に適用されます。

        デフォルトでは、カスケードされる操作はありません。

        デフォルト:
        {}
      • fetch

        FetchType fetch
        (オプション)関連付けを遅延ロードするか、積極的にフェッチする必要があるか。EAGER 戦略は、関連するエンティティを積極的に取得する必要があるという永続性プロバイダーランタイムの要件です。LAZY 戦略は、永続化プロバイダーランタイムへのヒントです。
        デフォルト:
        jakarta.persistence.FetchType.LAZY
      • mappedBy

        StringSE mappedBy
        関連を所有するフィールド。関連が単方向でない場合は必須です。
        デフォルト:
        ""