一尘不染

Hibernate-为什么使用多对一来表示一对一?

hibernate

我已经看到人们使用多对一映射来表示一对一关系。我也在加文·金(Gavin King)的书和文章中阅读了此内容。

例如,如果一个客户可以只有一个送货地址,而一个送货地址只能属于一个顾客,则映射为:

<class name="Customer" table="CUSTOMERS">
    ...
    <many-to-one name="shippingAddress"
                 class="Address"
                 column="SHIPPING_ADDRESS_ID"
                 cascade="save-update"
                 unique="true"/>
    ...
</class>

这本书的原因是(引用):

“您不在乎关联目标方面的内容,因此您可以将其视为 一对一的 关联,而无需涉及 很多 部分。”

我的问题是,为什么many-to-one不使用one-to-one?什么one-to-one使a成为不那么理想的选择many-to-one

谢谢。


阅读 295

收藏
2020-06-20

共1个答案

一尘不染

有多种方法可以在数据库中实现一对一关联:可以共享主键,但也可以使用具有唯一约束的外键关系(一个表具有一个外键列,该列引用了主键。相关表)。

在后一种情况下,映射它的hibernate方式是使用many-to-one关联(允许指定外键)。

原因很简单:您不在乎关联目标方面的内容,因此您可以将其像一对一关联一样对待,而不必考虑很多部分。
您只需要表达“此实体的属性是对另一个实体的实例的引用”,并使用外键字段表示该关系。

换句话说,使用a many-to-one映射 一对一外键关联 (实际上可能比 共享主键一对一关联 更频繁)。

2020-06-20