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
 与上面差不多,双向配置即可

 
 
 

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