パッケージ jakarta.persistence

アノテーション型 AssociationOverride


  • @RepeatableSE(AssociationOverrides.class)
    @TargetSE({TYPESE,METHODSE,FIELDSE})
    @RetentionSE(RUNTIMESE)
    public @interface AssociationOverride
    エンティティ関連のマッピングをオーバーライドするために使用されます。

    マップされたスーパークラスを継承するエンティティに適用して、マップされたスーパークラスによって定義された関連マッピングをオーバーライドできます。指定しない場合、関連付けは元のマッピングと同じようにマッピングされます。マップされたスーパークラスによって定義されたマッピングをオーバーライドするために使用される場合、AssociationOverride はエンティティクラスに適用されます。

    埋め込み可能オブジェクトがリレーションシップの所有側にある場合に、エンティティ内の埋め込み可能オブジェクトから別のエンティティへのリレーションシップマッピングをオーバーライドするために使用できます。埋め込み可能クラス(別の埋め込み可能クラス内に埋め込まれた埋め込み可能クラスを含む)によって定義された関連マッピングをオーバーライドするために使用される場合、AssociationOverride は埋め込み可能を含むフィールドまたはプロパティに適用されます。

    AssociationOverride を使用して、埋め込み可能クラスからの関連マッピングをオーバーライドする場合、name エレメントは、埋め込み可能クラス内の参照関連フィールドまたはプロパティを指定します。複数レベルの埋め込みでマッピングをオーバーライドするには、ドット("." )表記構文を name 要素で使用して、埋め込み属性内の属性を示す必要があります。ドット表記で使用される各識別子の値は、それぞれの埋め込みフィールドまたはプロパティの名前です。

    AssociationOverride を適用して、マップ値として使用される埋め込み可能クラスのマッピングをオーバーライドする場合、マップ値の一部として指定するには、オーバーライドされる埋め込み可能クラス内の属性の名前の前に "value." を使用する必要があります。

    リレーションシップマッピングが外部キーマッピングの場合、joinColumns 要素が使用されます。関連マッピングで結合テーブルを使用する場合は、joinTable エレメントを指定して、結合テーブルやその結合列のマッピングをオーバーライドする必要があります。

        Example 1: Overriding the mapping of a relationship defined by a mapped superclass
    
        @MappedSuperclass
        public class Employee {
            ...
            @ManyToOne
            protected Address address;
            ...
        }
        
        @Entity 
            @AssociationOverride(name="address", 
                                 joinColumns=@JoinColumn(name="ADDR_ID"))
            // address field mapping overridden to ADDR_ID foreign key
        public class PartTimeEmployee extends Employee {
            ...
        }
     
        Example 2: Overriding the mapping for phoneNumbers defined in the ContactInfo class
    
        @Entity
        public class Employee {
            @Id int id;
            @AssociationOverride(
              name="phoneNumbers",
              joinTable=@JoinTable(
                 name="EMPPHONES",
                 joinColumns=@JoinColumn(name="EMP"),
                 inverseJoinColumns=@JoinColumn(name="PHONE")
              )
            )
            @Embedded ContactInfo contactInfo;
           ...
        }
     
        @Embeddable
        public class ContactInfo {
            @ManyToOne Address address; // Unidirectional
            @ManyToMany(targetEntity=PhoneNumber.class) List phoneNumbers;
        }
     
        @Entity
        public class PhoneNumber {
            @Id int number;
            @ManyToMany(mappedBy="contactInfo.phoneNumbers")
            Collection<Employee> employees;
         }
        
    導入:
    1.0
    関連事項:
    Embedded, Embeddable, MappedSuperclass, AttributeOverride
    • 必須定数のサマリー

      必須要素  
      修飾子と型 必須要素 説明
      StringSEname
      (必須)プロパティベースのアクセスが使用されている場合はマッピングが上書きされるリレーションシッププロパティの名前、またはフィールドベースのアクセスが使用されている場合はリレーションシップフィールドの名前。
    • オプション要素のサマリー

      オプション要素  
      修飾子と型 オプションの要素 説明
      ForeignKeyforeignKey
      (オプション)テーブル生成が有効な場合に、joinColumns 要素に対応する列の外部キー制約の生成を指定または制御するために使用されます。
      JoinColumn[]joinColumns
      永続属性にマップされている結合列。
      JoinTablejoinTable
      関連をマップする結合テーブル。
    • 要素の詳細

      • name

        StringSE name
        (必須)プロパティベースのアクセスが使用されている場合はマッピングが上書きされるリレーションシッププロパティの名前、またはフィールドベースのアクセスが使用されている場合はリレーションシップフィールドの名前。
      • joinColumns

        JoinColumn[] joinColumns
        永続属性にマップされている結合列。関連のマッピングのオーバーライドで外部キーマッピングを使用する場合は、joinColumns 要素を指定する必要があります。関連のマッピングのオーバーライドで結合テーブルを使用する場合は、joinColumns エレメントを指定しないでください。
        デフォルト:
        {}
      • foreignKey

        ForeignKey foreignKey
        (オプション)テーブル生成が有効な場合に、joinColumns 要素に対応する列の外部キー制約の生成を指定または制御するために使用されます。この要素といずれかの joinColumns 要素の foreignKey 要素の両方が指定されている場合、動作は未定義です。どちらの場所でも外部キーアノテーション要素が指定されていない場合は、永続性プロバイダーのデフォルトの外部キー戦略が適用されます。
        導入:
        2.1
        デフォルト:
        @jakarta.persistence.ForeignKey(jakarta.persistence.ConstraintMode.PROVIDER_DEFAULT)
      • joinTable

        JoinTable joinTable
        関連をマップする結合テーブル。関連のマッピングのオーバーライドで結合テーブルを使用する場合は、joinTable エレメントを指定する必要があります。関連のオーバーライドで外部キーマッピングが使用されている場合は、joinTable 要素を指定しないでください。
        導入:
        2.0
        デフォルト:
        @jakarta.persistence.JoinTable