編輯:關於Android編程
一對一雙向關聯映射(六)
上篇博文一對一單向關聯映射(五),我們介紹了一對一的單向關聯映射,單向是指只能從人(Person)這端加載身份證端(IdCard),但是反過來,不能從身份證端加載人得信息。如圖所示:
關鍵原因在於對象模型具有方向性:
單向:一端只能加載另一端,不能反過來。
雙向:兩端都可以加載另一端。
問題來了:如何我們想從身份證端(IdCard)加載人(Person),怎麼辦呢?
下面我們開始介紹一對一的雙向關聯映射。
映射原理
雙向關聯映射與單向關聯映射的原理是一樣的,雙向關聯映射並不影響存儲,只影響加載。所以,雙向關聯映射和單向關聯映射的關系模型是一樣的即數據庫的表結構是一樣的,只是IdCard的實體類和配置文件(IdCard.hbm.xml)發生了一點點變化。
對象模型
從上圖中可以看出:
1、一個人只有一張身份證,唯一的一個身份證號,對象之間是一對一的關系;
2、兩個對象得關系維護還是由person端決定(因為關系只能由一端維護主鍵,否則關系就亂了)。
根據上面的對象模型,我們可以看到Person端沒有變化,但是要在IdCard端加上Person的引用,例如Person和IdCard實體類如下。
Person
package com.liang.hibernate; 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
package com.liang.hibernate; public class IdCard { private int id; private String cardNo; private Person person; public Person getPerson() { return person; } public void setPerson(Person person) { this.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; } }
無論是單向關聯映射還是雙向關聯映射,他們都屬於一對一關聯映射,只是他們主鍵的生成策略不同,分為主鍵關聯映射和唯一外鍵關聯映射。
由於它們都屬於一對一關聯映射,所以,Hibernate封裝雙向關聯映射時,主鍵關鍵映射和唯一外鍵關聯映射的加載策略一樣,都采用的是一對一,只是屬性設置不一致,所以,下面我們分開來看IdCard的配置文件。
分類:
主鍵關聯映射
同一對一單向關聯映射類似,主鍵關聯即利用主鍵進行關聯,關聯主鍵的值相同。下面我們看一下映射文件:
IdCard.hbm.xml
Person.hbm.xml,同一對一單向主鍵關聯映射一樣
idCard
生成的表結構
唯一外鍵關聯映射
一對一雙向關聯映射的外鍵關聯映射也與一對一單向關聯映射的外鍵關聯映射類似,在其一對一的指向端(Person)存在一個唯一外鍵,該唯一外鍵與被指向端(IdCard)相關聯,關聯主鍵的值相同。下面我們看一下映射文件:
IdCard.hbm.xml
Person.hbm.xml,同一對一單向唯一外鍵關聯映射一樣
生成的表結構
對比
一對一單向和雙向關聯映射的區別正是對象模型和關系模型的區別之一。
對象模型:有方向性。它到底是單向還是雙向是由對象模型決定的即配置文件決定。
關系模型:沒有方向性或者說是雙向的。從任何一端都可以加載另一端。
總結
一對一雙向關聯映射並不是必須的,是由需求下決定的。如果沒有這樣的需求,用戶也沒有要求,系統也不需要,就沒有必要建立雙向的關聯映射。
今天給大家講講android開發中比較常見的listView的下拉加載,其實也可以叫做分頁加載。為什麼會有這個叫法呢?說說我的理解吧!從字面上很好理解。當你滑動一個列表到
File file = new File(“hah.txt”);//只是創建了一個對象file, file指向了hah.txt這個文件,hah.t
說起APP應用閃退很多用戶會第一時間想到蘋果設備閃退問題,而出現閃退並非蘋果的"專利",而在安卓蘋果下,近期就有用戶遇到微信手機版出現閃
本文要演示的Android開發實例是如何完成一個Android中的miniTwitter登錄界面,下面將分步驟講解怎樣實現圖中的界面效果,讓大家都能輕松的做出美觀的登錄界