在上次的博文Hibernate從入門到精通(五)一對一單向關聯映射中我們講解了一下一對一單向關聯映射, 這次我們繼續講解一下與之對應的一對一雙向關聯映射。
一對一雙向關聯
與一對一單向關聯映 射所不同的的是在一對一雙向關聯中,不但在一個對象(Person)中存在另一個對象(IdCard)的引用,而在另一 個對象(IdCard)中也存在對該對象(Person)的引用,這樣即可以在加載該對象(Person)的時候找到另一個對象 (IdCard),也可以在加載另一個對象(IdCard)的時候找到該對象(Person)。
類結構圖如下所 示:
具體代碼如下所 示:
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; private Person person; 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; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } }
與一對一單向關聯映射相同,一對一雙向關聯映射同樣關聯的策略不同會生成不同的表結構,也可 以分為主鍵關聯和唯一外鍵關聯。但與一對一單向關聯映射相同的是生成的表結構,即一對一雙向關聯映射與 一對一單向關聯相比,只是改變了一對一關聯映射的加載,並沒有改變存儲。
主鍵關聯
主鍵關 聯表結構如下:
同一對一單向關聯映射類似, 主鍵關聯即利用主鍵進行關聯,關聯主鍵的值相同。其相應的*.hbm.xml配置文件代碼如 下:
<class name="com.zs.hibernate.IdCard" table="t_idCard"> <id name="id"> <generator class="native"/> </id> <property name="cardNo"/> <one-to-one name="person"/> </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"/> <one-to-one name="person" property-ref="idCard"/> </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配置映射。
到此為止,單向和雙 向的一對一關聯我們就講解完畢了。講的不夠細,僅僅給大家講解了一下實例和幾點區別,但對於掌握和應用 Hibernate這些就可以了。下次我們繼續講解Hibernate映射的其他幾種。