通常在數據庫或者現實的實體關系中存在3種現象: 1-1 ,1-N , N-N 其中1對1的關系 好比一個丈夫 只有一個 妻子
,一個妻子也只有一個老婆,一對多的關系 就像 1個人能有多個 房子,而一個房子只能有一個房主, 多對多
好比一個班有多個老師來教,而一個老師能教多個班。
在實體設計中 也存在這樣映射關系,一對一 用的比較少,一對多或者 多對多 用的比較常見。
先來介紹下一對一 ;
每種映射關系都存在 有連接表和無連接表 兩種情況,下面我都講解 無連接表的情況。
第一種情況; 基于外鍵的雙向 關聯
什么意思呢; 基于外鍵的關聯好比 一個表的外鍵是另一個表的主鍵,學過數據庫的朋友應該都知道這種主從表關系(父子表關系)。
數據的表設計就不多做解釋了,下面著重講解 映射文件的寫法;
在hibernate框架中的我們都知道 一個表應該對應一個實體 即模型(bean) 所有主從表的話基本要設計兩個bean對象,那么每個bean對象就必須寫上一個xml問價作為hibernate框架 控制的橋梁。
在主表對應的bean對象的 xml文件的寫法如下;
<hibernate-mapping package="lee‘>
<class name="對應bean對象的全路徑" table=“對應的表名">
<id name="id的名字" column="表中的字段名" > <!-- 如果 兩個的名字一樣的則column可以不寫-->
<ganerator class="native” /> 主鍵生成策略</id>
<property name="其他的屬性名">
........
<!-- 關鍵代碼-->
主bean 類的寫法加上一個屬性 表示 另一個 bean的 變量,在子bean中同樣如此
<one-to-one name="對應子表中的對象的變量名"
" class="另一個bean對象的全路徑" cascade="all" property-ref="在另一個bean中代表本類的變量名"></one-to-one> cascade="all"表示 同步兩個表
</class>
</ hibernate-mapping>
另一個bean ,即子表bean的xml文件的寫法
<前面和主bean一樣>
主鍵生成策略:foreign
<many-to-one name="對應主bean對象的變量名" unique=“true”表示唯一外鍵
column=“外鍵名”
class="主bean的全路徑"></many-to-one>
2:基于主鍵的雙向 1-1關聯
什么是基于主鍵 ; 即一個表的主鍵是另一個的主鍵,一個的主鍵變化 另一個表也同時變化
xml寫法
<one-to-one name="另一個bean的變量名" class=“另一個bean的全路徑” cascade="all">