Hibrenate常見的1-N等關聯映射整理

<set name="address" table="preson_address">
  <!-- 指定連接表中記錄外鍵的列名-->
  <key column="preson_id"/>
  <!-- column 指定連接表中關聯對象對應的列名-->
  <many-to-many class="Address" column="address_id">
 </set>


一:1-N 關聯:
 (1):無連接表的單項1-N 多 關聯 <one-to-many>

  <set name="" >
   <key name=""/>
   <one-to-many class="">
  </set>



 (2) 有連接表的 單項 1-N

  <set name="集合屬性名稱" table="連接表的表名">
   <key name="指定連接表的參照外物的列名/>
   <many-to-many class="" column="" unique="true"/>
  </set>


 

 (3) 無連接表 雙向 1-N
  1:端的配置如下:

  <set name="addr" inverse="true">
   <!--指定連接表中參照本表的外鍵名 -->
   <key  column="stu_id"></key>
   <!-- 映射到關聯屬性-->
   <one-to-many class="Address" />
  </set>


  
  N:端的配置
  column 指定關聯屬性對應的外鍵列名 與上面的 key colum 必須一致
  <many-to-one name="stuinf" class="StudentInf" column="stu_id" not-null="true"/>
  注意 1:先持久化 1 一端的對象,這樣能爲 N 端持久化時候提供外鍵值
    2:先設置 1 端和 N 端的關聯關係。 再之久話 N 端
    3:inverse = true 所以,我們不要通過 1 端來設置和 N 端的關聯關係。
  執行如下:
  Hibernate: insert into student_inf (name, age) values (?, ?)
  Hibernate: insert into address_inf (ad, stu_id) values (?, ?)
  Hibernate: insert into address_inf (ad, stu_id) values (?, ?)
  
(4) 有連接表的雙向 1-N
 N 端的配置:

 <!-- 有外連接表的 1-N N 端配置 -->
 <join table="stu_addr">
  <!-- colum 指定的是 持久化類在表中 外鍵關聯的列名-->
  <key column="addr_id"></key>
  <!--column 指定的是關聯類在 表中的外鍵列名  -->
  <many-to-one name="stuinf" class="StudentInf" column="stu_id" not-null="true"/>
 </join>



 1: 端的配置:

 <set name="addr" inverse="true" table="stu_addr">
  <!-- 指定連接表的外鍵 -->
  <!-- colum 指定的是 持久化類在表中 外鍵關聯的列名-->
  <key  column="stu_id"></key>
  <!-- 有連接表的 1-N 多用 many-to-many -->
  <!--column 指定的是關聯類在 表中的外鍵列名  -->
  <many-to-many class="Address" column="addr_id" unique="true"/>
 </set>


 執行結果:
 Hibernate: insert into student_inf (name, age) values (?, ?)
 Hibernate: insert into address_inf (ad) values (?)
 Hibernate: insert into stu_addr (stu_id, addr_id) values (?, ?)
 Hibernate: insert into address_inf (ad) values (?)
 Hibernate: insert into stu_addr (stu_id, addr_id) values (?, ?)
二:1-1 關聯映射的配置
 (1)基於主鍵的 單項 1-1
 <!-- 基於外鍵的主鍵是根據生成策略 foreign 表明根據主鍵來生成該主鍵-->

 <id name="id" column="person_id">
  <generator class="foregin">
   <param name="property">address</param>
  </generator>
  <property name="" column=""/>
  <one-to-one name="address">
 </id>


 (2)基於外鍵的 非連接表 單項 1-1
 其實就是many-to-one 增加屬性 unique = "true"
 

<many-to-one name="address" class="Address" cascade="all" unique="true" column="address_id"/>


 (3)有連接表的 單項 1-1 (其實就是 有連接表的 many-to-one)
 

<join table="person_addre">
  <key column="person_id"/>
  <many-to-one name="address" class="Addrerss" column="address_id">
 </join>


 下面的都與上面的相類似只是在 雙面都配置
 (4) 基於外鍵的雙向 1-1
 (5) 基於主鍵的雙向 1-1
 (6) 有連接表的雙向 1-1
 
三: N-N 關聯
 (1)單向 N-N 關聯
  (2)雙向 N-N
 與上面差不多,雙向配置即可

 
 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章