Hibernate中映射一對(duì)多關(guān)聯(lián)
在域模型中,類與類之間最普遍的關(guān)系就是關(guān)聯(lián)關(guān)系.以客戶(Customer)和訂單(Order)的關(guān)系為例,一個(gè)客戶能發(fā)出多個(gè)訂單,而一個(gè)訂單只屬于一個(gè)客戶.從Order到Customer的關(guān)聯(lián)是多對(duì)一關(guān)聯(lián),每個(gè)Order對(duì)象都會(huì)引用一個(gè)Customer對(duì)象,因此在Order類中應(yīng)該定義一個(gè)Customer類型的屬性.
從Customer到Order是一對(duì)多關(guān)聯(lián),意味著每個(gè)Customer對(duì)象都會(huì)引用一組Order對(duì)象,因此在Customer類中應(yīng)該定義一個(gè)集合類型的屬性,來引用所有Order對(duì)象.
多對(duì)一的單向關(guān)聯(lián)關(guān)系:
customer.hbm.xml
<hibernate-mapping>
<class name="Customer" table="CUSTOMERS">
<id>
…………
</class>
</hibernate-mapping>
order.hbm.xml
<hibernate-mapping>
<class name="Order" table="ORDER">
<id>
…………
<many-to-one name="customer" column="CUSTOMER_ID" class="Customer" not-null="true"/>
</class>
</hibernate-mapping>
級(jí)聯(lián)保存和更新
在<many-to-one>中加入cascade="save-update" 默認(rèn)為none
一對(duì)多的雙向關(guān)聯(lián)關(guān)系,從內(nèi)存中讀取比數(shù)據(jù)庫(kù)中快,所有針對(duì)大量的根據(jù)客戶查詢訂單的操作,需要使用雙向。
customer.hbm.xml
<hibernate-mapping>
<class name="Customer" table="CUSTOMERS">
<id>
…………
<set name="orders" cascade="save-update" inverse="true"> //根據(jù)Orders變化來同步兩張表
<key column="CUSTOMER_ID"/> //cascade="true"級(jí)聯(lián)刪除,刪除了客戶信息,訂單也自動(dòng)刪除
<one -to-many class="Order">
</set>
</class>
</hibernate-mapping>
order.hbm.xml
<hibernate-mapping>
<class name="Order" table="ORDER">
<id>
…………
<many-to-one name="customer" column="CUSTOMER_ID" class="Customer" not-null="true"/>
</class>
</hibernate-mapping>
posted on 2005-09-26 21:24 天生我才 閱讀(345) 評(píng)論(0) 編輯 收藏 所屬分類: Hibernate