一、概念
一對一關聯映射:
兩個對象之間是一對一的關係,例如人和身份證號碼之間的關係。
單向一對一關聯映射:
雙向一對一關聯映射(將在下篇文章中給出介紹):
在一個對象中存在另一個對象的引用,而在另一個對象中也存在對該對象的引用。即可以由對象“人”得到對象“身份證”的信息,同時也可以由對象“身份證”得到對象“人”的信息。
二、類圖以及實體類結構
public class Person {
private int id;
private String name;
private IdCard idCard;
//省略get、set方法
}
public class IdCard {
private int id;
private String cardNo;
//省略get、set方法
}
根據關聯的策略不同會生成不同的表結構,可以分爲主鍵關聯和唯一外鍵關聯。
主鍵關聯
最終表結構如下:
映射配置爲:
<hibernate-mapping>
<class name="com.example.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.example.hibernate.User" table="t_person">
<id name="id">
<!-- 採用foreign生成策略,它會取得關聯對象的標識 -->
<generator class="foreign">
<!-- property 指的是關聯的對象 -->
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<one-to-one name="idCard" constrained="true" />
</class>
</hibernate-mapping>
唯一外鍵關聯
最終表結構如下:
映射配置文件如下:
<hibernate-mapping>
<class name="com.example.hibernate.Person" table="t_person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- 默認參考idCard的主鍵-->
<many-to-one name="idCard" unique="true"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.example.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
</class>
</hibernate-mapping>