在電子商務應用中,經常會有這樣的需求:根據給定的客戶,得到該客戶的所有訂單;根據給定的訂單,得到該訂單的所屬客戶。對於這種雙向關聯的情況,在Hibernate應用中,也有人叫多對一雙向關聯,只是叫法不同而已,都是通過映射一對多雙向關聯關係來實現的。
不管是多對一單向關聯還是(一對多)多對一雙向關聯,在關係型數據庫中的表現方式都是一樣的,均通過外鍵參照來實現如圖4-18所示。
只是在持久化類與ORM映射文件中單向關聯與雙向關聯存在一些區別而已,如圖4-19所示。
持久化類Customer.java:
- package com.ORM;
- import java.io.Serializable;
- import java.util.*;
- public class Customer implements Serializable{
- private java.lang.Integer id; //ID號
- private java.lang.String cname; //客戶姓名
- private java.lang.String bank; //銀行賬號
- private java.lang.String phone; //聯繫電話
- private Set orders = new HashSet(); //訂單集合
- public Customer(){}
- //省略上述各屬性的get/set方法對
- }
持久化類Orders.java:
- package com.ORM;
- import java.io.Serializable;
- public class Orders implements Serializable{
- private java.lang.Integer id; //ID號
- private java.lang.String orderno; //訂單編號
- private java.lang.Double money; //訂單金額
- private Customer customer; //訂單的所屬客戶
- public Orders(){}
- //省略上述各屬性的get/set方法對
- }
customer表與Customer類的ORM映射文件Customer.hbm.xml:
- <hibernate-mapping package="com.ORM">
- <class name="Customer" table="customer">
- <id name="id" column="ID" type="integer">
- <generator class="identity"/>
- </id>
- <property name="cname" column="CNAME" type="string" />
- <property name="bank" column="BANK" type="string" />
orders表與Orders類的ORM映射文件Orders.hbm.xml: