心得5-hibernate級聯之一對一單雙向剖析

來源:互聯網
上載者:User

1.知識點概述

<!--格式化顯示的sql語句,好看  -->

<property name="format_sql">true</property>

<!--顯示sql語句  -->

<property name="show_sql">true</property>

關聯關係包括多樣性和方向性的關聯。映射關聯關係就是把物件模型中類之間的關聯關係映射成關聯式模式中資料庫表之間的外鍵參考關聯性。

2. 一對一關聯性

單向一對一:(公民與身份證)

方式一:基於唯一主鍵

Citizen.hbm.xml

<many-to-one name=“idCard” column=“idCard_id”unique=“true” cascade=“all”/>

     類似於多對一的關係書寫,最重要的是unique=“true”這句話,來指明關係為一對一。

方式二:基於外鍵

Citizen.hbm.xml:

<id name=“id” column=“id”>

  <generator class=“foreign”>

    <param name=“property”>idCard</param>

  </generator>

</id>

….

<one-to-one name=“idCard” constrained=“true” cascade=“all”/>

基於主鍵的比較繁瑣一些,具體就是以上寫法,某一類的主鍵同時是另一個類的外鍵.constrained=“true”,這個意思是是否顯示參照語句,一般是建立表的時候是否寫出外鍵的參照語句,true為真即寫出.

雙向一對一:(公民與身份證)基於唯一外鍵的一對一關聯其外鍵可以放在任意一端,在需要存放外鍵的一端,使用many-to-one元素,添加unqiue=true;沒有存放外鍵的那一端需要使用one-to-one元素,此時還需要通過property-ref屬性來指定這一端只是關聯另一端,不需要額外的列或外鍵,由hibernate管理這個關係。Citizen.hbm.xml<many-to-one name=“idCard” column=“idCard_id” unique=“true” cascade=“all”/>IDCard.hbm.xml<one-to-one name=“citizen” property-ref=“idCard”/>基於主鍵一端的主鍵使用foreign策略來參照另一端的主鍵來產生。這樣兩端就具有相同的主索引值。3.  案例分析1)單向一對一:(公民與身份證)方式一:基於唯一主鍵 Citizen.hbm.xml <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hbsi.one2one_fk">      <class name="Citizen" table="citizen_fk">        <id name="id">           <generator class="native"/>        </id>        <property name="name" column="name"/>        <many-to-one name="idCard" column="id_card" unique="true" cascade="save-update"></many-to-one>    </class></hibernate-mapping> IdCard.hbm.xml <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.hbsi.one2one_fk">      <class name="IdCard" table="idCard_fk">        <id name="id">           <generator class="native"/>        </id>        <property name="no" column="no"/>    </class></hibernate-mapping> 方式二:基於外鍵 Citizen.hbm.xml <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hbsi.one2one_pk">      <class name="Citizen" table="citizen_pk">        <id name="id">           <generator class="foreign">             <param name="property">idCard</param>           </generator>        </id>        <property name="name" column="name"/>       <one-to-one name="idCard" cascade="save-update"/>    </class></hibernate-mapping> IdCard.hbm.xml與基於主鍵的一樣,同樣都是一般情況,沒有特殊2).雙一對一:(公民與身份證)方式一:基於唯一主鍵 Citizen.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hbsi.one2oneboth_fk">      <class name="Citizen" table="citizenboth_fk">        <id name="id">           <generator class="native"/>        </id>        <property name="name" column="name"/>       <many-to-one name="idCard" unique="true" column="id_card" cascade="all"></many-to-one>    </class></hibernate-mapping> IdCard.hbm.xml <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hbsi.one2oneboth_fk">      <class name="IdCard" table="idCardboth_fk">        <id name="id">           <generator class="native"/>        </id>        <property name="no" column="no"/>        <one-to-one name="citizen" property-ref="idCard"></one-to-one>    </class></hibernate-mapping> 方式二:基於外鍵 Citizen.hbm.xml <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hbsi.one2oneboth_pk">      <class name="Citizen" table="citizenboth_pk">        <id name="id">           <generator class="foreign">             <param name="property">idCard</param>           </generator>        </id>        <property name="name" column="name"/>       <one-to-one name="idCard" cascade="save-update"/>    </class></hibernate-mapping> IdCard.hbm.xml <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hbsi.one2oneboth_pk">      <class name="IdCard" table="idCardboth_pk">        <id name="id">           <generator class="native"/>        </id>        <property name="no" column="no"/>        <one-to-one name="citizen"></one-to-one>    </class></hibernate-mapping> 


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.