7.1.2 一对一的外键关联
不是共享一个主键,而是两个
行可以有一个外键
关系。一桌有洋
引用主要的键列
关联表的键。 (这
此外键的源和目标
约束甚至可以是同一张表:
这称为自引用
关系。)
让我们从用户更改映射
到一个地址。而不是共享
主键,你现在添加一个
SHIPPING_ADDRESS_ID 列中的
USERS 表:
<class name="User" table="USERS">
<many-to-one name="shippingAddress"
class="Address"
column="SHIPPING_ADDRESS_ID"
cascade="save-update"
unique="true"/>
</class>
用于此的 XML 中的映射元素
关联是 <many-to-one> — 不是
<one-to-one>,你可能有
预期的。原因很简单:你
不在乎目标端有什么
协会的,所以你可以对待
它就像一个 to-one 关联,没有
许多部分。你想要的只是
表达“这个实体有一个财产
这是对一个实例的引用
另一个实体”并使用外键
字段来表示这种关系。
此映射的数据库架构
如图7.3所示。
图 7.3 一对一的外来语
USERS 和
ADDRESS
附加约束强制执行此操作
真正的一对一关系。经过
制作SHIPPING_ADDRESS_ID
列唯一,您声明一个
具体地址可以参考
最多由一个用户作为运费
地址。这不如
来自共享主键的保证
关联,它允许特定的
最多被引用的地址
一位用户,期间。与几个外国
关键列(假设你也有
独特的HOME_ADDRESS_ID 和
BILLING_ADDRESS_ID),你可以
引用相同的地址目标行
几次。但无论如何,两个
用户不能共享相同的地址
相同的目的。
让我们从用户建立关联
到地址双向。
反向属性引用
最后一个外键关联是
从用户映射到地址
<many-to-one> 和一个独特的
约束以保证所需的
多样性。什么映射元素可以
您在地址端添加以制作
这个关联是双向的,所以
从地址到用户的访问是
在 Java 领域模型中可能吗?
在 XML 中,您创建一个 <one-to-one>
使用属性引用进行映射
属性:
<one-to-one name="user"
class="User"
property-ref="shippingAddress"/>
你告诉 Hibernate 用户
Address 类的属性是
另一个属性的倒数
协会的一方。你现在可以
致电anAddress.getUser() 访问
您的收货地址的用户
给定的。没有额外的列
或外键约束;休眠
为您管理此指针。