@TargetSE(valueSE={METHODSE,FIELDSE}) @RetentionSE(valueSE=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; }
JoinTable| 修飾子と型 | オプションの要素と説明 |
|---|---|
CascadeType[] | cascade(オプション)関連付けのターゲットにカスケードする必要がある操作。 |
FetchType | fetch(オプション)関連付けを遅延ロードするか、積極的にフェッチする必要があるか。 |
StringSE | mappedBy 関連を所有するフィールド。 |
ClassSE | targetEntity(オプション)関連付けのターゲットであるエンティティクラス。 |
public abstract ClassSE targetEntity
ジェネリクスを使用して定義されている場合、デフォルトはコレクションのパラメーター化された型です。
public abstract CascadeType[] cascade
ターゲットコレクションが java.util.MapSE の場合、cascade 要素はマップ値に適用されます。
デフォルトでは、カスケードされる操作はありません。
public abstract FetchType fetch
public abstract StringSE mappedBy
Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.