我只用 @OneToOne 注释了我的字段,当我检查数据库(使用 liquibase 生成)时,发现数据库列有唯一的约束。
这是否意味着@OneToOne 本身就暗示了唯一性,例如。一个建筑只能在一个城市,其他建筑不能在同一个城市?
当我想告诉同一个城市可能还有其他建筑物时,我该怎么办?
我不想在 city 类中放置一个 Buildings 字段,因为我永远不会调用 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;
}
Run Code Online (Sandbox Code Playgroud)
该JPA规范认为,对于一个双向OneToOne关系(2.10.1双向OneToOne关系):
假如说:
- 实体 A 引用实体 B 的单个实例。
- 实体 B 引用实体 A 的单个实例。
- 实体 A 被指定为关系的所有者。
以下映射默认值适用:
- 实体 A 映射到名为 A 的表。
- 实体 B 映射到名为 B 的表。
- 表 A 包含表 B 的外键。[...]外键列与表 B 的主键类型相同,并且有一个唯一键约束。
如果是单向 OneToOne 关系(2.10.3.1 单向 OneToOne 关系):
以下映射默认值适用:
- 实体 A 映射到名为 A 的表。
- 实体 B 映射到名为 B 的表。
- 表 A 包含表 B 的外键。[...]外键列与表 B 的主键类型相同,并且有一个唯一键约束。
如果您有城市-建筑关系,那么对于任何合理的城市来说,它都是一对多/多对一关系,因为给定的城市可以有多个建筑,但给定的建筑只能在一个城市中。
| 归档时间: |
|
| 查看次数: |
3198 次 |
| 最近记录: |