@Repeatable(value=AssociationOverrides.class) @Target(value={TYPE,METHOD,FIELD}) @Retention(value=RUNTIME) public @interface AssociationOverride
マップドスーパークラスで定義されたリレーションシップのマッピングをマップドスーパークラスを拡張したエンティティに適用して上書きすることができます。
指定されていない場合、関連はオリジナルのマッピングと同じものがマッピングされます。
マップドスーパークラスで定義されたマッピングを上書きする時はAssociationOverrideはエンティティクラスに適用されます。
組み込みクラスがリレーションシップの所有者側の場合は組み込みクラスの中から他のエンティティへのリレーションシップのマッピングを上書きするために使用できます。
組み込みクラス(他の組み込みクラスに含まれる組み込みクラスの場合を含みます)で定義されたリレーションシップのマッピングを上書きする場合は
AssociationOverrideはその組み込みクラスを含むフィールドもしくはプロパティに適用されます。
AssociationOverrideが組み込みクラス内のリレーションシップを参照したフィールドもしくはプロパティを上書きするために使用された場合、
name要素は組み込みクラス内のリレーションシップを参照したフィールドもしくはプロパティを指定します。
複数の埋め込みレベルのマッピングを上書きするには、組み込み属性内の属性を示すためにname要素にドット(".")表記形式を使用する必要があります。
ドット表記で使用される各識別子の値は、それぞれの組み込みフィールドもしくはプロパティの名前です。
AssociationOverride がMapの値として使用されている組み込みクラスのマッピングを上書きするために適用されている場合は
マップの値の一部として指定するために上書きされる組み込みクラスの含まれる属性の名前のプレフィックスとしてvalue."を使用する必要があります。
リレーションシップが外部キーマッピングの場合はjoinColumns要素が使用されます。
リレーションシップのマッピングが結合テーブルを使用する場合はjoinTable要素を結合テーブルやその結合カラムのマッピングを上書きするために指定する必要があります。
Example 1: マップドスーパークラスで定義されたリレーションシップのマッピングを上書きする
@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: ContactInfoクラスで定義されたphoneNumbersのマッピングを上書きする
@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; // 単方向
@ManyToMany(targetEntity=PhoneNumber.class) List phoneNumbers;
}
@Entity
public class PhoneNumber {
@Id int number;
@ManyToMany(mappedBy="contactInfo.phoneNumbers")
Collection<Employee> employees;
}
Embedded,
Embeddable,
MappedSuperclass,
AttributeOverride| 修飾子とタイプ | 必須要素と説明 |
|---|---|
java.lang.String |
name
(必須) プロパティベースのアクセスが使用されている場合にはマッピングが上書きされるリレーションシップのプロパティの名前、
またはフィールドベースのアクセスが使用されている場合はリレーションシップのフィールドの名前。
|
| 修飾子とタイプ | 任意要素と説明 |
|---|---|
ForeignKey |
foreignKey
(オプション) テーブルの生成が有効な場合に
joinColumns要素に関係するカラムのための外部キー制約の生成を指定または制御するために使用されます。 |
JoinColumn[] |
joinColumns
永続属性にマッピングされる結合カラム。
|
JoinTable |
joinTable
リレーションシップのマッピングをされる結合テーブル。
|
public abstract java.lang.String name
public abstract JoinColumn[] joinColumns
joinColumns要素を指定する必要があります。
リレーションシップの上書きに結合テーブルが使用される場合はjoinColumns要素を指定してはいけません。public abstract ForeignKey foreignKey
joinColumns要素に関係するカラムのための外部キー制約の生成を指定または制御するために使用されます。
この要素とjoinColumns要素のいずれかのforeignKey要素の両方が指定されていた場合の挙動は未定義です。
いずれの場所にも外部キーのアノテーション要素が指定されていない場合は、永続化プロバイダのデフォルトの外部キー戦略が適用されます。public abstract JoinTable joinTable
joinTable 要素を指定する必要があります。
リレーションシップの上書きに外部キーマッピングが使用される場合はjoinTable要素を指定してはいけません。Translated by @megascus.