关系对

我们可以将 @OneToOne/@OneToOne 关系对视为与 @OneToMany/@ManyToOne 关系对相同,但增加了 “多”端的基数为 “至多 1”。

从关系数据库的角度来看,@OneToOne 关系对类似于 @OneToMany/@ManyToOne 对,但 增加了唯一性约束,该约束有效地将 “多”端的基数限制为 “至多 1”。

从 Ebean 内部来看,@OneToOne(mappedBy=) 的作用非常类似于 @OneToMany(mappedBy=) [“多”端],而另一个 @OneToOne 的作用类似于 @ManyToOne [“一”端]

@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 “一”端

“一”端的 @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;