@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.