上次的博文中 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相關配置的具體內容,建議大家找一本相關書籍進 行詳細閱讀。
到此為止關於一對一單向關聯我們就已經講完了,下次我們繼續講解關系映射中的一對 一雙向關聯。