リレーションシップペア

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