在域模型中,類與類之間最普遍的關系就是關聯關系.以客戶(Customer)和訂單(Order)的關系為例,一個客戶能發出多個訂單,而一個訂單只屬于一個客戶.從Order到Customer的關聯是多對一關聯,每個Order對象都會引用一個Customer對象,因此在Order類中應該定義一個Customer類型的屬性.
從Customer到Order是一對多關聯,意味著每個Customer對象都會引用一組Order對象,因此在Customer類中應該定義一個集合類型的屬性,來引用所有Order對象.
多對一的單向關聯關系:
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>
級聯保存和更新
在<many-to-one>中加入cascade="save-update" 默認為none
一對多的雙向關聯關系,從內存中讀取比數據庫中快,所有針對大量的根據客戶查詢訂單的操作,需要使用雙向。
customer.hbm.xml
<hibernate-mapping>
<class name="Customer" table="CUSTOMERS">
<id>
…………
<set name="orders" cascade="save-update" inverse="true"> //根據Orders變化來同步兩張表
<key column="CUSTOMER_ID"/> //cascade="true"級聯刪除,刪除了客戶信息,訂單也自動刪除
<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>