1. 程式人生 > >Hibernate第二篇之瞭解物件關係對映

Hibernate第二篇之瞭解物件關係對映

        今天寫部落格的時候還是想對自己說幾句話,堅持真的是一件很難的事情,你看轉眼幾天過去了,渾渾噩噩的過去了,什麼都沒有幹,突然間就像是斷了線的風箏沒有了方向。我想要自己每個星期都要抽出一點時間來總結這周的學習進度,每天都要有進步,每天都要往自己的git上提交程式碼,每天都要寫個人的日誌來總結今天學了什麼,都要寫部落格來記錄自己的學習經歷!@自己

一、物件關係對映

物件間主要分為兩種:單向、雙向

對映分為四種:1-1  1-n  n-1 n-n

由此分析物件關係對映7種:

單向1-1

單向1-n(需熟練掌握的)

單向n-1(最常用的)

單向n-n

雙向1-1

雙向1-n

雙向n-n(理解,可以用兩個單向n-1來實現)

這裡只記錄最常用的兩個

單向n-1

Person-Address(多人住一個地址)

Person的實體裡有Address屬性

public class Person {
	private Integer id;
	private String name;
	private Address address;
}
public class Addressss{
	private Integer id;
	private String name;
}

Person配置(Person.hbm.xml):

<hibernate-mapping package="one_n_1">
	<class name="Person" table="t_Person">
		<id name="id">
			<generator class="increment"/>
		</id>
		<property name="name"/>
		<!-- 單向n-1
		name,屬性名
		class,關聯類
		column,外來鍵列明
		 -->
		<many-to-one name="address" class="Address" column="address_id"></many-to-one>//重點
	</class>
</hibernate-mapping>
Address的配置不變
<hibernate-mapping package="one_n_1">
	<class name="Address" table="t_Address">
		<id name="id">
			<generator class="increment"/>
		</id>
		<property name="name"/>
	</class>
</hibernate-mapping>

單向1-1

實體跟上面單向n-1一樣

唯一改變的地方是Person配置(Person.hbm.xml):

<many-to-one unique="true" name="address" class="Address" column="address_id"></many-to-one>

單項1-n

Person-Address(一個人住多個地址

public class Person {
	private Integer id;
	private String name;
	private Set<Address> addresses=new HashSet<Address>();
}
public class Address{
	private Integer id;
	private String name;
}

Person配置(Person.hbm.xml

<hibernate-mapping package="one_1_n">
	<class name="Person" table="t_Person">
		<id name="id">
			<generator class="increment"/>
		</id>
		<property name="name"/>
		<!-- 單向1-n -->
		<set name="addresses">
			<!-- 指定關聯列的外來鍵 -->
			<key column="person_id"/>
			<!-- 關聯的具體類 -->
			<one-to-many class="Address"/>
		</set>
	</class>
</hibernate-mapping>

單向n-n

這裡需要中間表來連線,跟單項1-n的變化是

Person配置(Person.hbm.xml):

<hibernate-mapping package="one_n_n">
	<class name="Person" table="t_Person">
		<id name="id">
			<generator class="increment"/>
		</id>
		<property name="name"/>
		<!-- 單向n-n
		多對多,需要中間表來維繫關係
		 -->
		<set name="addresses" table="t_person_address">
			<!-- 指定當前類在中間表中關聯列的外來鍵 -->
			<key column="person_id"/>
			<!-- 關聯的具體類
			column,關聯類在中間表中關聯列的外來鍵
			 -->
			<many-to-many class="Address" column="address_id"/>
		</set>
	</class>
</hibernate-mapping>

表關係如圖所示


因為很多配置都是重複的所以只列舉了改變的配置。

先寫單向的吧,雙向有時間在更。