hibernate双向多对一映射关系

在电子商务应用中,经常会有这样的需求:根据给定的客户,得到该客户的所有订单;根据给定的订单,得到该订单的所属客户。对于这种双向关联的情况,在Hibernate应用中,也有人叫多对一双向关联,只是叫法不同而已,都是通过映射一对多双向关联关系来实现的。

不管是多对一单向关联还是(一对多)多对一双向关联,在关系型数据库中的表现方式都是一样的,均通过外键参照来实现如图4-18所示。

 
 

只是在持久化类与ORM映射文件中单向关联与双向关联存在一些区别而已,如图4-19所示。

 

  
 

 

持久化类Customer.java:


  1. package com.ORM;  
  2. import java.io.Serializable;  
  3. import java.util.*;  
  4. public class Customer implements Serializable{  
  5.     private java.lang.Integer id;               //ID号  
  6.     private java.lang.String cname;                 //客户姓名  
  7.     private java.lang.String bank;              //银行账号  
  8.     private java.lang.String phone;                 //联系电话  
  9.     private Set orders = new HashSet();             //订单集合  
  10.     public Customer(){}      
  11.     //省略上述各属性的get/set方法对  

持久化类Orders.java:


  1. package com.ORM;  
  2. import java.io.Serializable;  
  3. public class Orders implements Serializable{  
  4.     private java.lang.Integer id;               //ID号  
  5.     private java.lang.String orderno;               //订单编号  
  6.     private java.lang.Double money;                 //订单金额  
  7.     private Customer customer;              //订单的所属客户  
  8.     public Orders(){}  
  9.     //省略上述各属性的get/set方法对  

customer表与Customer类的ORM映射文件Customer.hbm.xml:


  1. <hibernate-mapping package="com.ORM">  
  2.     <class name="Customer" table="customer">  
  3.         <id name="id" column="ID" type="integer">  
  4.             <generator class="identity"/>  
  5.         </id>   
  6.         <property name="cname" column="CNAME" type="string" />  
  7.         <property name="bank" column="BANK" type="string" /> 

 

  
 

 

orders表与Orders类的ORM映射文件Orders.hbm.xml:

 

  
 

发布了21 篇原创文章 · 获赞 28 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章