是否存在差异,因为我没有看到一个。如果没有双向关系,模型如何知道有多对多。让我们说用户有手机和手机可以给多个用户。如果用户实体中描述的单向关系是ManyToMany,那么在User中再次描述的OneToMany单向关系中,Phone实体的不同之处是什么。
是否有必要对关系进行准确描述,以便一切按预期工作。我曾将OneToMany关系描述为OneToOne,模型仍然有效。
答案 0 :(得分:2)
单向OneToMany可以使用连接列或连接表。如果是连接列,则目标实体中存在只能引用单个实体的外键。如果选择连接表,则可以生成DDL,以便添加约束以使目标实体的外键唯一,从而实施严格的1:M关系。但他们不必这样做。从JPA的角度来看,在OneToMany上使用连接表使其与ManyToMany几乎完全相同。
至于将OneToMany映射为OneToOne - 这取决于你的意思。如果您的OneToMany关系基于目标实体表中存在的外键,那么它在逻辑上是数据库中的OneToOne以另一种方式运行。唯一的区别是,在构建源实体时,JPA只会在构建关系时期望单个目标实体。因此,如果目标中的外键不是唯一的(即有许多匹配),则只有第一个可能被拉起并置于关系中 - 因此关系状态将与实际数据库数据不匹配。当您尝试直接操作关系或从其他上下文合并时,这会导致问题,因为它可能已经以不同方式填充。