日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

發布時間:2024/4/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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


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

轉載于:https://www.cnblogs.com/ainima/p/6330986.html

總結

以上是生活随笔為你收集整理的【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。