【SSH進階之路】Hibernate映射——一對一單向關聯映射(五)

來源:互聯網
上載者:User

標籤:gravity   雙向關聯   one   單一實例   協助   概念   pyw   原理   text   

【SSH進階之路】Hibernate基本原理(一) ,小編介紹了Hibernate的基本原理以及它的核心,採用對象化的思維操作關係型資料庫。

【SSH進階之路】Hibernate搭建開發環境+簡單一實例(二),小編搭建了基本Hibernate的開發環境。並做了一個簡單一實例,對它的基本原理有了一個理性的認識。

【SSH進階之路】Hibernate基本映射(三),我們介紹了Hibernate的基本映射(即對一個實體進行映射)的相關概念。並給大家實現相關執行個體。比較簡單。

【SSH進階之路】Hibernate映射——多對一單向關聯映射(四)。我們介紹了多對一的關聯映射,並具體了講解了,映射技巧。這篇我們依然使用此映射技巧,協助大家更好的理解。

 

      以下開始今天的愉快之旅。

 

映射原理

 

      兩個實體物件之間是一對一的關聯映射,即一個對象僅僅能與另外唯一的一個對象相相應。

比如:一個人(Person)僅僅有一張身份證(IdCard)。我們看一下這個範例的物件模型,例如以所看到的:

 

物件模型

 

       

        從中能夠看出:

        1、一個人僅僅有一張身份證,唯一的一個社會安全號碼。對象之間是一對一的關係。

        2、人(Person)持有身份證(IdCard)的引用,所以,兩個對象關係維護由person端決定。

        從物件模型映射成關聯式模式,有兩種方式:主鍵關聯和唯一外部索引鍵關聯,我們繼續看以下的內容。

 

分類: 

 

 主鍵關聯:

 

        1、兩個實體物件的主鍵一樣,以表明它們之間的一一相應關係。

        2、不須要多餘的外鍵欄位來維護關係,僅通過主鍵來關聯,即Person的主鍵要依賴IdCard的主鍵,他們共用一個主索引值。

        以上兩點恰與唯一外部索引鍵關聯相反。

 

 主鍵關聯的關聯式模式

 Person.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.liang.hibernate"><class name="Person" table="t_person"><id name="id"><!-- 採用foreign建置原則。forgeign會取得另外一個關聯對象的標識 --><generator class="foreign" ><param name="property">idCard</param></generator></id><property name="name"></property><!-- one-to-one指示hibernate怎樣載入其關聯對象,預設依據主鍵載入也就是拿到關係欄位值,依據對端的主鍵來載入關聯對象constrained="true"表示約束,當前主鍵(person的主鍵)還是一個外鍵參照了對端的主鍵(IdCard的主鍵),也就是會產生外鍵約束語句 --> <!-- idCard屬性。表達的是本對象與IdCard的一對一關聯性。 --><one-to-one name="idCard" class="IdCard"  constrained="true"></one-to-one></class></hibernate-mapping>

產生的表結構以及測試資料:

 

唯一外部索引鍵關聯:

 

       1、兩個實體物件用一個外鍵來關聯。以表表明對象之間的關係。

       2、事實上它是多對一關聯映射的特例,多的一端加上唯一的限制之後,用來表示一對一的關聯關係。

       所以它採用多對一的標籤來映射。例如以下所看到的:

<!-- 採用<mang-to-one>標籤來映射,指定多的一端unique為true,這樣就限制了多的一端的多重性為一,就是這樣來映射的。

--><many-to-one name="" unique="true"></many-to-one>

唯一外鍵的關聯式模式

Person.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.liang.hibernate"><class name="Person" table="t_person"><id name="id"><generator class="native" ></generator></id><property name="name"></property><!-- 因為它是一對一的唯一外部索引鍵關聯,它是多對一關聯的特例,凝視能夠直接寫成多對一關聯--><!-- idCard屬性,表達的是本對象與IdCard的多對一關聯性。 --><many-to-one name="idCard" class="IdCard" column="idCardId" unique="true"></many-to-one></class></hibernate-mapping>

產生的表結構以及測試資料:

 

 

其它同樣代碼例如以下:

Person

public class Person {private int id;private String name;private IdCard idCard;public IdCard getIdCard() {return idCard;}public void setIdCard(IdCard idCard) {this.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;}}

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;}}

IdCard.hbm.xml

<?xml version="1.0"?

><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.liang.hibernate"><class name="IdCard" table="t_idCard"><id name="id"><generator class="native"></generator></id><property name="cardNo"></property></class></hibernate-mapping>

建議

 

因為一對一主鍵關聯映射具有下面兩個缺點:

      1、靈活性差。沒有辦法改成多對一關聯映射,不能應變多變的需求;

      2、必須先儲存關聯對象IdCard,之後才幹保持Person。

所以,在映射一對一單向關聯映射時,我們採用唯一外部索引鍵關聯映射。


     下篇博文。我們介紹一對一雙向關聯映射,謝謝關注。

【SSH進階之路】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.