一对一的外键关联:
不共享主键,而是两表可以有一个外键关系。一张表有着引用被关联表的主键的一个外键列。
- <class name="User" table="USER" dynamic-insert="true" dynamic-update="true"
- mutable="false">
-
<id
name="userId" column="USER_ID" type="integer"> - <generator class="native"/>
- </id>
-
<property
name="userName" type="string" column="user_Name"/> -
<!--
在User里面添加维护信息,也就是把User作为维护端 --> -
<many-to-one
name="address" class="Address" -
column="ADDRESS_ID" unique="true" cascade="save-update"/>
(这里用的many-to-one,而不是我们共享主键里面的one-to-one,因为:你不在乎关联的目标端是什么,
因此可以像对待没有多端的対一关联对待他。通过unique来强制说明只存在一的对应关系)
反向属性引用:
- <class name="Address" table="ADDRESS">
-
<id
name="addressId" column="ADDRESS_ID" type="integer"> - <generator class="native">
- </generator>
- </id>
-
<property
name="street" type="string" column="street"/> -
<property
name="city" type="string" column="city"/> -
<!--
property-ref="address"告诉hibernateAddress
--> -
<!--
基于外键的的唯一约束,一般不建议这么做,这个是不需要的 --> -
<one-to-one
name="user" class="User" property-ref="address"/>
插入:
-
Address
address = new Address("street", "city"); - user.setAddress(address);
- //不需要
- address.setUser(user);