1. 程式人生 > 其它 >Java中使用Hibernate系列之單向Set-based的關聯學習(第四節)

Java中使用Hibernate系列之單向Set-based的關聯學習(第四節)

接著學習,後續5個章節中我們將學習Hibernate關聯對映的相關知識,前面我們已經映射了一個持久化實體類到表上,現在在這個基礎上增加一些類之間的關聯,首先我們往應用程式裡增加人(people)的概念,並存儲他們所參與的一個Event列表。

網路配圖

先建立一個Person類(後面章節中也會用到此類),程式碼如下:

package events;
public class Person {
private Long id;
private int age;
private String firstname;
private String lastname;
public Person() {}
}

建立一個名為Person.hbm.xml的新對映檔案(一定要加DTD引用):

<hibernate-mapping>
<class name="events.Person" table="PERSON">
<id name="id" column="PERSON_ID">
<generator class="native"/>
</id>
<property name="age"/>
<property name="firstname"/>
<property name="lastname"/>
</class>
</hibernate-mapping>

最後,把新的對映加入到Hibernate的配置中:

<mapping resource="events/Event.hbm.xml"/>
<mapping resource="events/Person.hbm.xml"/>

現在我們在這兩個實體之間建立一個關聯。

從易到難,我們先學習單向Set-based的關聯 ,在Person類增加一連串的events,通過呼叫aPerson.getEvents(),就可以輕鬆地連結到特定person所參與的events,而不用去執行一個顯式的查詢,我們使用Java的集合類(collection):Set,因為set 不包含重複的元素及與我們無關的排序。

我們用set實現一個單向多值關聯,在Java類裡為這個關聯編碼,接著對映它,程式碼如下:

public class Person {
private Set events = new HashSet();
public Set getEvents() {
return events;
}
public void setEvents(Set events) {
this.events = events;
}
}

在對映這個關聯之前,先考慮一下此關聯的另外一端,這個關聯是單向的;我們也可以在Event裡建立另外一個集合,我

們可以實現一個多對多(many-to-many)關聯,這裡我們用天Hibernate的多對多對映:

<class name="events.Person" table="PERSON">
<id name="id" column="PERSON_ID">
<generator class="native"/>
</id>
<property name="age"/>
<property name="firstname"/>
<property name="lastname"/>
<set name="events" table="PERSON_EVENT">
<key column="PERSON_ID"/>
<many-to-many column="EVENT_ID" class="events.Event"/>
</set>
</class>

Hibernate支援各種各樣的集合對映,<set>使用的最為普遍,對於多對多關聯(或叫n:m實體關係), 需要一個關聯表(association table),表裡面的每一行代表從person到event的一個關聯,表名是由set元素的table屬性配置的,關聯裡面的識別符號欄位名,對於person的一端,是由<key>元素定義,而event一端的欄位名是由<many-to-many>元素的column屬性定義。你也必須告訴Hibernate集合中物件的類。

因而這個對映的資料庫schema是:

對映關係圖

好了,這一節的學習先到這裡,後面章節中會繼續學習Hibernate。我們學習方式是每一節學習一個知識點(每天花10分鐘學習)。