我仅使用@OneToOne注释了我的字段,当我检查数据库(使用liquibase生成)时,发现数据库列存在唯一约束。
这是否意味着@OneToOne本身就意味着唯一性,例如。一栋建筑只能在一个城市,而其他建筑物不能在同一个城市?
当我想告诉同一个城市可能还有其他建筑物时,我该怎么办?
我不想在城市课堂上放置一个建筑物场,因为我不会打电话给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;
}
答案 0 :(得分:3)
JPA specification表示对于双向OneToOne关系( 2.10.1双向OneToOne关系):
假设:
- 实体A引用实体B的单个实例。
- 实体B引用实体A的单个实例。
- 实体A被指定为关系的所有者。
以下映射默认值适用:
- 实体A映射到名为A的表。
- 实体B映射到名为B的表。
- 表A包含表B的外键。 [...] 外键列与表B的主键具有相同的类型,并且存在唯一键约束就可以了。
如果是单向OneToOne关系( 2.10.3.1 Unidirectional OneToOne Relationships ):
以下映射默认值适用:
- 实体A映射到名为A的表。
- 实体B映射到名为B的表。
- 表A包含表B的外键。 [...] 外键列与表B的主键具有相同的类型,并且存在唯一键约束就可以了。
如果您有城市建设关系,那么对于任何合理的城市,它将是OneToMany / ManyToOne关系,因为给定城市可以有多个建筑物,但是给定建筑物只能在一个城市。