在电子商务应用中,经常会有这样的需求:根据给定的客户,得到该客户的所有订单;根据给定的订单,得到该订单的所属客户。对于这种双向关联的情况,在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: