@Target(value={METHOD,FIELD})
@Retention(value=RUNTIME)
public @interface OneToOne
OneToOneアノテーションのmappedBy要素を使用して、
所有側のエンティティのリレーションシップを示すフィールドまたはプロパティを指定する必要があります。
OneToOneアノテーションは組み込みクラス(Embeddableの付いたクラス)からエンティティクラスへのリレーションシップを指定するために組み込みクラス内で使用できます。
リレーションシップが双方向であり、組み込みクラスを含むエンティティがリレーションシップの所有側のエンティティである場合、
被所有側のエンティティでは、組み込みクラスのリレーションシップを示すフィールドまたはプロパティを指定するためにOneToOneアノテーションのmappedBy要素を使用する必要があります。
組み込み属性内のリレーションシップの属性を示すには、mappedBy要素でドット(".")表記を使用する必要があります。
ドット表記で使用される各識別子の値は、それぞれの組み込みフィールドまたはプロパティの名前です。
Example 1: 外部キーのカラムを使用してマッピングする1対1の関連付け
// On Customer class:
@OneToOne(optional=false)
@JoinColumn(
name="CUSTREC_ID", unique=true, nullable=false, updatable=false)
public CustomerRecord getCustomerRecord() { return customerRecord; }
// On CustomerRecord class:
@OneToOne(optional=false, mappedBy="customerRecord")
public Customer getCustomer() { return customer; }
Example 2: ソースと対象の両方が同じ主キー値を共有することを前提とした1対1の関連付け
// On Employee class:
@Entity
public class Employee {
@Id Integer id;
@OneToOne @MapsId
EmployeeInfo info;
...
}
// On EmployeeInfo class:
@Entity
public class EmployeeInfo {
@Id Integer id;
...
}
Example 3: 組み込みクラスから別のエンティティへの1対1の関連付け
@Entity
public class Employee {
@Id int id;
@Embedded LocationDetails location;
...
}
@Embeddable
public class LocationDetails {
int officeNumber;
@OneToOne ParkingSpot parkingSpot;
...
}
@Entity
public class ParkingSpot {
@Id int id;
String garage;
@OneToOne(mappedBy="location.parkingSpot") Employee assignedTo;
...
}
| 修飾子とタイプ | 任意要素と説明 |
|---|---|
CascadeType[] |
cascade
(オプション) 関連付けの対象にカスケードする必要のある操作。
|
FetchType |
fetch
(オプション) 関連付けを遅延ロード(LAZY)するか、即座に取得(EAGER)する必要があるかどうか。
|
java.lang.String |
mappedBy
(オプション) リレーションシップを所有するフィールド。
|
boolean |
optional
(オプション) 関連付けがオプションかどうか。
|
boolean |
orphanRemoval
(オプション) リレーションシップから削除されたエンティティに対し削除操作を適用し削除操作をそれらのエンティティにカスケードするかどうか。
|
java.lang.Class |
targetEntity
(オプション) 関連付けの対象となるエンティティクラス。
|
public abstract java.lang.Class targetEntity
デフォルトでは関連付けを格納するフィールドまたはプロパティの型になります。
public abstract CascadeType[] cascade
デフォルトではすべての操作はカスケードされません。
public abstract FetchType fetch
訳注:つまりEAGERは必ず有効になり、LAZYが有効になるかは実装に依存します。
public abstract boolean optional
Translated by @megascus.