上次的博文中 Hibernate從入門到精通(四)基本映射我們已經講解了一下基本映射和相關概念,接下來 我們會講稍微復雜點的映射——關系映射。
關系映射分類
關系映射即在基本映射的基礎上處理 多個相關對象和多個相關表之間聯系的映射。關系映射從對應關系的角度可以分為如下七種類型:一對一單向關聯 一對一雙向關聯 一對多單向關聯 多對一單向關聯 一對多雙向關聯 多對多單向關聯
多對多雙向關聯
接下來博客,我們會分別講解一下這七種關系映射。今天我們只講其中的一對一單向關聯。
一對一 單向關聯
一對一單向關聯從對象的角度分析,即在一個對象(Person)中存在另一個對象(IdCard)的引 用,而在另一個對象(IdCard)中則不存在該對象(Person)的引用,這樣就可以在加載該對象(Person)的時候找 到另一個對象(IdCard)。類結構圖如下所示:

具體代碼如下所示:
public class Person {
private int id;
private String name;
private IdCard idCard;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
}
public class IdCard {
private int id;
private String cardNo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCardNo() {
return cardNo;
}
public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}
}
上述類結構的相應根據關聯的策略不同會生成不同的表結構,可以分為主鍵關聯和唯一外鍵關聯。
主鍵關聯
主鍵關聯表結構如下:

可以看出,主鍵關聯即利用主 鍵進行關聯,關聯主鍵的值相同。其相應的*.hbm.xml配置文件代碼如下:
<class
name="com.zs.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
</class>
<class name="com.zs.hibernate.Person" table="t_person">
<id name="id">
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<one-to-one name="idCard" constrained="true"/>
</class>
唯一外鍵關聯
唯一外鍵關聯表結構如下:

與主鍵關聯所不 同,唯一外鍵關聯除主鍵外,在其一對一的指向端(Person)存在一個唯一外鍵,該唯一外鍵與被指向端 (IdCard)相關聯,關聯主鍵的值相同。其相應的*.hbm.xml配置文件代碼如下:
<class
name="com.zs.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
</class>
<class name="com.zs.hibernate.Person" table="t_person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="idCard" unique="true"/>
</class>
同之前的基本映射一樣,我們同樣可以利用注解對類帶進行相關配置,這裡我們就 不做過多的介紹了。還是之前說過的,要想了解注解和XML相關配置的具體內容,建議大家找一本相關書籍進 行詳細閱讀。
到此為止關於一對一單向關聯我們就已經講完了,下次我們繼續講解關系映射中的一對 一雙向關聯。