Hibernate從入門到精通(六)一對一雙向關聯映射 .

來源:互聯網
上載者:User
 在上次的博文Hibernate從入門到精通(五)一對一單向關聯映射中我們講解了一下一對一單向關聯映射,這次我們繼續講解一下與之對應的一對一雙向關聯映射。


一對一雙向關聯        與一對一單向關聯映射所不同的的是在一對一雙向關聯中,不但在一個對象(Person)中存在另一個對象(IdCard)的引用,而在另一個對象(IdCard)中也存在對該對象(Person)的引用,這樣即可以在載入該對象(Person)的時候找到另一個對象(IdCard),也可以在載入另一個對象(IdCard)的時候找到該對象(Person)。

類結構圖如下所示: 具體代碼如下所示: [java] view plain copy print ? 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;       }   }  

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設定檔代碼如下:
[html] view plain copy print ? <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>  
<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設定檔代碼如下:
[html] view plain copy print ? <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>  

<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映射的其他幾種

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.