新手上路之Hibernate(四):單向一對一關聯映射(主鍵、唯一外鍵關聯)

一、概念

一對一關聯映射:

       兩個對象之間是一對一的關係,例如人和身份證號碼之間的關係。

單向一對一關聯映射:

       即在一個對象中存在另一個對象的引用,而在另一個對象中則不存在該對象的引用。 以人和身份證號碼之間的關係爲例,表示只能由對象“人”得到對象“身份證”的信息,而不能同時由對象“身份證”得到對象“人”的信息。(當然實際中是可以的,爲了說明只能做一下這樣的規定了)。

雙向一對一關聯映射(將在下篇文章中給出介紹):

       在一個對象中存在另一個對象的引用,而在另一個對象中也存在對該對象的引用。即可以由對象“人”得到對象“身份證”的信息,同時也可以由對象“身份證”得到對象“人”的信息。

二、類圖以及實體類結構


public class Person {
	private int id;
	private String name;
	private IdCard idCard;
	//省略get、set方法
}

public class IdCard {
	private int id;
	private String cardNo;
	//省略get、set方法
}

根據關聯的策略不同會生成不同的表結構,可以分爲主鍵關聯和唯一外鍵關聯。

主鍵關聯

最終表結構如下:


映射配置爲:

<hibernate-mapping>
	<class name="com.example.hibernate.IdCard" table="t_idCard">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="cardNo"/>
	</class>
</hibernate-mapping>

<hibernate-mapping>
	<class name="com.example.hibernate.User" table="t_person">
		<id name="id">
			<!-- 採用foreign生成策略,它會取得關聯對象的標識 -->
			<generator class="foreign">
				<!-- property 指的是關聯的對象 -->
				<param name="property">idCard</param>
			</generator>
		</id>
		<property name="name"/>
		<one-to-one name="idCard" constrained="true" />
	</class>
</hibernate-mapping>

唯一外鍵關聯

最終表結構如下:



映射配置文件如下:

<hibernate-mapping>
	<class name="com.example.hibernate.Person" table="t_person">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<!-- 默認參考idCard的主鍵-->
		<many-to-one name="idCard" unique="true"/>
	</class>
</hibernate-mapping>
<hibernate-mapping>
	<class name="com.example.hibernate.IdCard" table="t_idCard">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="cardNo"/>
	</class>
</hibernate-mapping>


單向一對一關聯映射就講到這裏了,下次會介紹雙向的一對一關聯映射。


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