閱讀184 返回首頁    go iPhone_iPad_Mac_apple


第九章 關係映射 一對一關係 唯一外鍵方式實現一對一

如:person與idCard

基於外鍵的one-to-one可以描述為多對一。

  hibernate 一對一唯一外鍵關聯映射(雙向關聯 Person<---->IdCard ) 
         一對一唯一外鍵 雙向 關聯,需要在另一端(person ),添加 <one-to-one> 標簽,指示 hibernate 如何加載 其關聯對象,默認根據主鍵加載idcard ,外鍵關聯映射中,因為兩個實體采用的是 idcard 的外鍵維護的關係, 所以不能指定主鍵加載 idcard ,而要根據 idcard 的外鍵加載,所以采用如下映射方式: 
        <one-to-onename="idcard" property-ref="person"/>

id_card表中有一個person_id的外鍵。

實體類和根據共享主鍵方式中的一樣,不變。


Person.hbm.xml:

<hibernate-mapping>
    <class name="cn.framelife.hibernate.entity.Person" table="person" catalog="hibernate">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator  />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="45" not-null="true" />
        </property>
         <!-- 沒有下麵的one-to-one標簽也行,但那樣就變成了單向關聯(IdCard ----》 Person) ,也就是當知道IdCard後,能找到它屬於的對應的人,但知道某人後,卻無法找到相對應的IdCard-->  
        <one-to-one name="idCard" property-ref="person"/>  
    </class>
</hibernate-mapping>

IdCard.hbm.xml:

<hibernate-mapping>
	<class name="cn.framelife.hibernate.entity.IdCard" table="id_card"
		catalog="hibernate">
		<id name="id" type="java.lang.Integer">
			<column name="id" />
			<generator  />
		</id>
		<property name="cardNo" type="java.lang.String">
			<column name="card_no" length="45" not-null="true" />
		</property>
		<!-- 
		指定多的一端的unique=true,這樣就限製了多的一端的多重性為一   
                  通過這種手段映射一對一唯一外鍵關聯 
        -->  
		<many-to-one name="person" column="person_id" unique="true" />  
	</class>
</hibernate-mapping>


增加與查詢操作和結果都與共享主鍵方式中是一樣的


最後更新:2017-04-03 18:52:06

  上一篇:go ubuntu下新增一個用戶以及擁有sudo權限方法
  下一篇:go 如何用sql server 數據庫恢複.bak數據庫備份