詳解一對一關係映射

        Hibernate其實就是ORM的一種實現方式,其表達的就是實體和關係之間的一種關係。比方說實體之間有幾種關係:一對一,多對一,多對多。而在下面要說的就是一對一關係映射,其分兩種情況:主鍵映射和外鍵映射
1、主鍵映射:(person的id即是主鍵,又是IdCard的外鍵)
           
       
        1Person-IdCard(單向關聯,關係在Person
             iIdCard:
                                <hibernate-mapping>
    <class name="com.tgb.hibernate.IdCard" table="t_idCard">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="cardNo" />
    </class>
</hibernate-mapping>
                        ii、Person:
                                    <hibernate-mapping>
    <class name="com.tgb.hibernate.Person" table="t_person">
        <id name="id" type="integer">
            <!-- 採用foreign生成策略,foreign會取得關聯對象的標識 -->
            <generator class="foreign" >
                <!-- property指關聯對象 -->
                <param name="property">idCard</param>
            </generator>
        </id>
        <property name="name" />
        <!-- 
            one-to-one指示hibernate如何加載其關聯對象,默認根據主鍵加載
            也就是拿到關係字段值,根據對端的主鍵來加載關聯對象
            
            constrained="true"表示,當前主鍵(Person的主鍵)還是一個外鍵
            參照了對端的主鍵(IdCard的主鍵),也就是會生成外鍵約束語句
         -->
        <one-to-one name="idCard" constrained="true" />
    </class>
</hibernate-mapping>
     2Person-IdCard(雙向關聯,關係在Person),其餘關係不變,只需要在IdCard關係端加入person的引用即可:
            <hibernate-mapping>
    <class name="com.tgb.hibernate.IdCard" table="t_idCard">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="cardNo" />
        
        <!-- 關聯Person端 -->
        <one-to-one name="person" />
    </class>
</hibernate-mapping>
2、外鍵映射:就是在person的一端加入idCard的主鍵作爲外鍵
           
    
          1Person-IdCard(單向關聯,many-to-one的特殊形式,關係維護在person端)
            iIdCard

            <hibernate-mapping>

    <class name="com.tgb.hibernate.IdCard" table="t_idCard">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="cardNo" />
    </class>
</hibernate-mapping>
                                    iiPerson
                                                <hibernate-mapping>
    <class name="com.tgb.hibernate.Person" table="t_person">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" />
        
        <many-to-one name="idCard" unique="true" />
    </class>
</hibernate-mapping>
      2Person-IdCard(雙向關聯):其餘關係不變,只需在IdCard端添加對Person的關聯即可
<hibernate-mapping>
    <class name="com.tgb.hibernate.IdCard" table="t_idCard">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="cardNo" />
        
        <one-to-one name="person" property-ref="idCard" />
    </class>
</hibernate-mapping>  
3、當然有了上面的關係還是不行的,它不會自動映射到數據庫中生成我們要的表,所以在此我們還需要一個工具類幫助我們在數據庫中生成表,如下:
        public static void main(String[] args) {

        // 默認讀取hibernate.cfg.xml文件
        Configuration cfg =new Configuration().configure();
        
        SchemaExport export =new SchemaExport(cfg);
        
        export.create(truetrue);
    }
    
總結:通過配置上面的操作,我們就可以將其導入到數據庫中生成表。雖然看着有點麻煩,其實還是很簡單的。一對一說完了,結下來就要說多對一了,敬請期待...
        

發佈了159 篇原創文章 · 獲贊 243 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章