建立一对多双向关联关系

有Customer.java和Order.java两个类,分别代表客户表和定单表
    因为有以下需求:
      .根据给定的客户,查询该客户的所有订单
      .根据给定的订单,查询发出订单的客户
    建立一对多双向关联关系。
 
    customer.java的代码如下:
   
    package mypack;
   
  import java.io.Serializable;
   import java.util.Set;
  import java.util.HashSet;
  
  public class Customer implements Serializable{
   private Long id;
   private String name;
    private Set orders = new HashSet();
   
   //此处省略构造方法,以及id和name属性的访问方法
   ...
   
    public Set getOrders(){
    return orders;
   }
   
   public void setOrders(Set orders){
    this.orders = orders;
   }
  }
  在定义orders集合属性时,通常把它初始化为集合实现类的一个实例。即:
  private Set orders = new HashSet();
  
  Order.java的代码如下:
 
  package mypack;
 
  import java.io.Serializable;
 
  public class Order implements Serializable{
   private Long id;
   private String orderNumber;
   private Customer customer;
   
   //此处省略构造方法,以及id和orderNumber属性的访问方法
   
   public Customer getCustomer(){
    return customer;
   }
   
   public void setCustomer(Customer customer){
    this.customer = customer;
   }
  }
  注意到,在Order.java里有个customer的成员变量,为Customer类型。
 
  建立关联的xml源代码。
  Customer.hbm.xml如下:
 
  <hibernate-mapping>
   <class name="mypack.Customer" table="CUSTOMER">
    <id name="id" type="long" column="ID">
     <generator class="increment"/>
    </id>
    
    <property name="name" type="string">
     <column name="NAME" length="15"/>
    </property>
    
     <set name="orders" cascade="save-update">
     <key column="CUSTOMER_ID"/>
     <one-to-many class="mypack.Order"/>
    </set>
   </class>
  </hibernate-mapping>
  使用<set>元素映射orders属性。
  <set>元素包括以下属性:
  .name:设定待映射的持久化类的属性名,这里为Customer类的orders属性
  .cascade:当取值为"save-update",表示级联保存和更新。
  <set>元素还包含两个子元素:<key>和<one-to-many>.
  <one-to-many>元素设定所关联的持久化类,此处为Order类
  <key>元素设定与所关联的持久化类对应的表的外键,此处为ORDERS表的CUSTOMER_ID字段
 
  Order.hbm.xml如下:
  <hibernate-mapping>
   <class name="mypack.Order" table="ORDERS">
    <id name="id" type="long" column="ID">
     <generator class="increment"/>
    </id>
    
    <property name="orderNumber" type="string">
     <column name="ORDER_NUMBER" length="15"/>
    </property>
    
     <many-to-one name="customer" column="CUSTOMER_ID"
           class="mypack.CUSTOMER"
           not-null="true"/>
   </class>
  </hibernate-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值