我已经看到人们使用多对一映射来表示一对一关系。我也在加文·金(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?
many-to-one
one-to-one
谢谢。
有多种方法可以在数据库中实现一对一关联:可以共享主键,但也可以使用具有唯一约束的外键关系(一个表具有一个外键列,该列引用了主键。相关表)。
在后一种情况下,映射它的hibernate方式是使用many-to-one关联(允许指定外键)。
原因很简单:您不在乎关联目标方面的内容,因此您可以将其像一对一关联一样对待,而不必考虑很多部分。 您只需要表达“此实体的属性是对另一个实体的实例的引用”,并使用外键字段表示该关系。
换句话说,使用a many-to-one映射 一对一外键关联 (实际上可能比 共享主键一对一关联 更频繁)。