@Target(value={METHOD,FIELD})
@Retention(value=RUNTIME)
public @interface OneToMany
ジェネリクスを使用してコレクションが定義されている場合には要素の型を指定するために関連する対象のエンティティタイプを指定する必要はありません。
そうでない場合は対象のエンティティクラスを指定する必要があります。
エンティティ間のリレーションシップが双方向である場合、mappedBy要素を使用してリレーションシップの所有者側のエンティティのリレーションシップのフィールドまたはプロパティを指定する必要があります。
OneToManyアノテーションをエンティティクラス内に含まれる組み込みクラス内で、
エンティティのコレクションへのリレーションシップを指定するために使用できます。
エンティティ間のリレーションシップが双方向である場合、mappedBy要素を使用してリレーションシップの所有者側のエンティティのリレーションシップのフィールドまたはプロパティを指定する必要があります。
コレクションがjava.util.Mapの場合、cascade要素とorphanRemoval要素はマップの値に適用されます。
Example 1: ジェネリクスを使用した1対多の関連付け
// In Customer class:
@OneToMany(cascade=ALL, mappedBy="customer")
public Set<Order> getOrders() { return orders; }
In Order class:
@ManyToOne
@JoinColumn(name="CUST_ID", nullable=false)
public Customer getCustomer() { return customer; }
Example 2: ジェネリクスを使用しない1対多の関連付け
// In Customer class:
@OneToMany(targetEntity=com.acme.Order.class, cascade=ALL,
mappedBy="customer")
public Set getOrders() { return orders; }
// In Order class:
@ManyToOne
@JoinColumn(name="CUST_ID", nullable=false)
public Customer getCustomer() { return customer; }
Example 3:外部キーマッピングを使用する1方向の1対多の関連付け
// In Customer class:
@OneToMany(orphanRemoval=true)
@JoinColumn(name="CUST_ID") // join column is in table for Order
public Set<Order> getOrders() {return orders;}
| 修飾子とタイプ | 任意要素と説明 |
|---|---|
CascadeType[] |
cascade
(オプション) 関連付けの対象にカスケードする必要のある操作。
|
FetchType |
fetch
(オプション) 関連付けを遅延ロード(LAZY)するか、即座に取得(EAGER)する必要があるかどうか。
|
java.lang.String |
mappedBy
リレーションシップを所有するフィールド。
|
boolean |
orphanRemoval
(オプション) リレーションシップから削除されたエンティティに対し削除操作を適用し削除操作をそれらのエンティティにカスケードするかどうか。
|
java.lang.Class |
targetEntity
(オプション) 関連付けの対象のエンティティクラス。
|
public abstract java.lang.Class targetEntity
ジェネリクスを使用して定義されている場合、デフォルトはコレクションのパラメタライズドタイプです。
public abstract CascadeType[] cascade
デフォルトではすべての操作はカスケードされません。
対象のコレクションがjava.util.Mapである場合、
cascade属性はMapの値に適用されます。
public abstract FetchType fetch
訳注:つまりEAGERは必ず有効になり、LAZYが有効になるかは実装に依存します。
Translated by @megascus.