hibernate映射文件one-to-one


  1. one-to-one 元素

屬性:

  1. name:映射類屬性的名字
  2. class:映射的目標類
  3. cascade:設置操作中的級聯策略 可選值為 all所有操作情況均進行級聯、none所有操作情況均不進行級聯、save-update執行更新操作時級聯、delete執行刪除操作時級聯
  4. constrained:表明當前類對應的表與被關聯的表之間是否存在着外鍵約束 默認值為false
  5. fetch:設置抓取數據的策略 可選值為 join外連接抓取、select序列選擇抓取
  6. property-ref:設置關聯類的屬性名,此屬性和本類的主鍵相對應 默認值為關聯類的主鍵
  7. access:Hibernate訪問這個屬性的策略 默認值為property
  8. formula:絕大多數一對一關聯都指向其實體的主鍵。在某些情況下會指向一個或多個字段或是一個表達式,此時可用一個SQL公式來表示
  9. lazy:指定是否采用延遲加載及加載策略 默認值為proxy通過代理進行關聯 可選值為 true此對象采用延遲加載並在變量第一次被訪問時抓取、false此關聯對象不采用延遲加載
  10. entity-name:被關聯類的實體名

單向1——1關聯:

需要在實體中提供setter、getter方法;

 事實上單向的1——1和N——1配置非常相似;只需要在many-to-one元素增加 unique="true"屬性,用於表示N的一端必須是唯一的即可!(既然N的一端加了唯一性約束那么就成了1——1了!)

   A、基於外鍵的單向1——1關聯:

  將無 連接表的many-to-one元素增加 unique="true"屬性,即可完成映射!

    eg:

<!-- 用於映射1-1關聯實體,指定關聯實體類為Address
   指定外鍵列名為addressId,並指定級聯全部操作 --> 
  <many-to-one name="address" cascade="all"
   unique="true" class="Address" 
   column="addressId"/>

 

  B、有連接表的單向1——1關聯:

將連接表的many-to-one元素增加 unique="true"屬性,即可完成映射!

 

eg:

<!-- 映射連接表中參照關聯實體的外鍵列 --> 
   <many-to-one name="address" cascade="all"
    unique="true" class="Address" 
    column="addressId"/>

    C、基於主鍵的單向1——1關聯:

eg:

<class name="Person">
  <!-- 映射標識屬性personid -->
  <id name="personid" column="addressid">
   <!--  基於主鍵關聯時,主鍵生成策略是foreign,
    表明根據關聯類的主鍵來生成本表主鍵 -->
   <generator class="foreign">
    <!-- 指定引用關聯實體的屬性名 -->
    <param name="property">address </param>
   </generator>
  </id>
  <!-- 用於映射普通屬性 -->
  <property name="name" type="string"/>
  <property name="age" type="int"/>
  <!-- 下面映射基於主鍵的1-1關聯 -->
  <one-to-one name="address "/> 
 </class>

 

 雙向1——1關聯:

需要在兩邊實體類中增加引用關聯實體的屬性:

A、 基於外鍵的雙向1——1關聯:

    基於外鍵的1——1關聯,外鍵可以存放在任意一端,

  1.        存放的一端要增加many-to-one元素,並添加unique=”true“,
  2.        另一端使用one-to-one元素,使用property-ref指定引用關聯類的屬性;

eg:

Preson.hbm.xml 
 <!-- one-to-one元素映射關聯屬性,外鍵列在對方的表內
   person-ref指定引用關聯類的屬性。
   即:在address屬性所屬的Address類內,
   必須有person屬性的setter和getter方法 --> 
  <one-to-one name="address" property-ref="person"/>

 

Address.hbm.xml

  <!-- 使用many-to-one映射1-1關聯實體 
   unique="true"確定為1-1--> 
  <many-to-one name="person" unique="true"
   column="person_id" not-null="true"/>

 

B、基於主鍵的雙向1——1關聯:

             主鍵映射策略,一端的主鍵生成器必須使用foreign策略,表名根據對方的主鍵生成策略來生成自己的主鍵本實體不能擁有自己的主鍵生成策略;

 

eg:
Preson.hbm.xml

<!-- one-to-one元素映射關聯屬性 --> 
  <one-to-one name="address"/>

Address.hbm.xml

<!-- Address持久化類-->
 <class name="Address">
  <!-- 映射標識屬性addressid -->
  <id name="addressid">
   <!-- 指定foreign主鍵生成器策略-->
   <generator class="foreign">
    <!-- 指定根據主鍵將根據person屬性引用的
     關聯實體的主鍵來生成--> 
    <param name="property">person</param>
   </generator>
  </id>
  <!-- 映射普通屬性addressdetail -->
  <property name="addressdetail"/>
  <!-- 用於映射關聯屬性 -->
   <one-to-one name="person"/> 
 </class>

 

C、有連接表的雙向1——1關聯:

  用的比較少,只給出例子:

eg:

Preson.hbm.xml

 <!-- 使用join元素強制使用連接表 --> 
  <join table="person_address" inverse="true">
   <!-- 映射連接表中參照本實體主鍵的外鍵列 --> 
   <key column="person_id" unique="true"/>
   <!-- 映射1-1關聯實體 --> 
   <many-to-one name="address" class="Address"
     unique="true" column="address_id"/> 
  </join>

 

Address.hbm.xml

<!-- 使用join元素強制使用連接表 --> 
  <join table="person_address" optional="true">
   <!-- 映射連接表中參照本實體主鍵的外鍵列 -->
   <key column="address_id" unique="true"/>
   <!-- 映射1-1關聯實體 --> 
   <many-to-one name="person" class="Person"
    unique="true" column="person_id" /> 
  </join>

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM