リレーションシップペア
@OneToOne
/@OneToOne
リレーションシップペアを@OneToMany
/@ManyToOne
リレーションシップペアと同じように考えられますが、追加として「複数」側のカーディナリティが「最大1」であるという点があります。
リレーショナルデータベースの観点から見ると、@OneToOneリレーションシップペアは一意制約の追加
により「複数」側のカーディナリティを効果的に「最大1」に制限する点で、@OneToMany/@ManyToOneペアに似ています。
Ebean内部の観点からは、@OneToOne(mappedBy=)は@OneToMany(mappedBy=) [「複数」側]と非常によく似ており、もう一方の@OneToOneは@ManyToOne [「1つ」側]と非常によく似ています。
@OneToOne「複数」側
「複数」側の@OneToOneにはmappedBy
属性があります(@OneToManyと同様に)。
@Entity
public class Wheel ...
// has "mappedBy" (like @OneToMany)
// ... so we can think of this as the "many" side
// ... with cardinality limited to "at most 1"
@OneToOne(mappedBy = "wheel")
Tire tire;
...
@OneToOne「1つ」側
「1つ」側の@OneToOneにはmappedBy
属性がありません。この側は@ManyToOneとほぼ同じように動作します。
この側は外部キー列にマップされます。外部キー列が命名規則と一致しない場合は、@JoinColumn
を指定できます。
@Entity
public class Tire ...
// no mappedBy (like @OneToMany)
// ... so the "one" side of the relationship
// ... means it maps to the foreign key
// ... use @JoinColumn if needed
@OneToOne
@JoinColumn(name = "wheel")
Wheel wheel;