@OneToOne是否意味着独特



我只用@OneToOne注释了我的字段,当我检查数据库(使用likibase生成)时,发现数据库列上有唯一的约束。

这是否意味着@OneToOne本身就意味着独特性,例如一栋建筑只能在一个城市,而其他建筑不能在同一个城市?

当我想告诉别人同一个城市可能还有其他建筑时,我该怎么办?

  • 添加@JoinColumn(unique=false)
  • 只使用@JoinColumn(unique=false)而不使用@oneToOne
  • 或者使用@ManyToOne
  • 还是不加任何注释

我不想把Buildings字段放在city类中,因为我永远不会调用city.getBuildings();。以下内容是否需要双向引用?

class Building {
    @OneToOne(optional = false)
    City city;
}
class Building {
    @OneToOne(optional = false)
    @JoinColumn(unique = false)
    City city;
}
class Building {
    @JoinColumn(unique = true)
    City city;
}
class Building {
    @ManyToOne
    City city;
}

JPA规范规定,对于双向OneToOne关系(2.10.1双向OneToOneRelationships):

假设:

  • 实体A引用实体B的单个实例
  • 实体B引用实体a的单个实例
  • 实体A被指定为关系的所有者

以下映射默认值适用:

  • 实体A映射到名为A的表
  • 实体B被映射到名为B的表
  • 表A包含表B的外键。[…]外键列的类型与表B的主键相同,并且有一个唯一键约束

在单向一对一关系的情况下(2.10.3.1单向一对二关系):

以下映射默认值适用:

  • 实体A映射到名为A的表
  • 实体B被映射到名为B的表
  • 表A包含表B的外键。[…]外键列的类型与表B的主键相同,并且有一个唯一键约束

如果你有城市建筑关系,那么对于任何合理的城市来说,这都是一对多/多对一的关系,因为给定的城市可以有多个建筑,但给定的建筑只能在一个城市。

相关内容

  • 没有找到相关文章

最新更新