当前位置:编程学习 > JAVA >>

Hibernate 表关系描述之OneToMany

Hibernate 表关系描述之OneToMany
 上篇写了一对一,那么在这篇我们讲一对多,那么在表中的一对多,是使用外键关联,通过一张表的一个键另一个表的外键来建立一多关系;
 而在类中表示为一个类中有一个集合属性包含对方类的很多对象,而在另一个类中,只包含前术类的一个对象,从而实现一对多关系的建立!
 而在Hibernate中采用的是Set类型集合,而使用<one-to-many>主<many-to-one>来实现,好了,我们来看一下:
首先看看表结构!

customer表:

create table customers
(
    ID bigint not null    primary key auto_increment,
    userName varchar(20)
);Order表: create table orders
(
    ID bigint not null primary key auto_increment,
    customers_ID bigint,    --应该为customers(ID)外键
    orderDescription varchar(50)--订单描述
);

有了上面简单的客户表与订单表,来建立一个Project!~并且添加Hibernate~并由上面二张表生成Beans,主键都是native类型~自动递增!
我们将 自动生成的Customer.java    Bean添加一个SET属性,代码如下:


package fengyan.Hibernate;

import java.util.HashSet;
import java.util.Set;

/**
 *Authod:    fengyan
 *    date:    2006-12-30 01:02   
 */

public class Customers  implements java.io.Serializable {


    // Fields   

     private Long id;
     private String userName;

     //必须定义一个Set集合类型的属性以及它的get和set方法,
     //它持有一个Customers对象所发出的所有订单的引用
     private Set orders = new HashSet();

    // Constructors

    public Set getOrders() {
        return orders;
    }


    public void setOrders(Set orders) {
        this.orders = orders;
    }


    /** default constructor */
    public Customers() {
    }

   
    /** full constructor */
    public Customers(String userName) {
        this.userName = userName;
    }

  
    // Property accessors

    public Long getId() {
        return this.id;
    }
   
    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return this.userName;
    }
   
    public void setUserName(String userName) {
        this.userName = userName;
    }

}

 

为Order.java   Bean 去掉cid(CustomerID)并添加一个Customer属性,代码如下:


package fengyan.Hibernate;
/**
 *Authod:    fengyan
 *    date:    2006-12-30 01:02   
 */

public class Orders  implements java.io.Serializable {


    // Fields   

     private Long id;
  //   private Long customersId;
     private String orderDescription;

     //添加一个Customers属性,用来引用一个订单对象所属的客户对象
     private Customers customer;
    // Constructors

    public Customers getCustomer() {
        return customer;
    }


    public void setCustomer(Customers customer) {
        this.customer = customer;
    }


    /** default constructor */
    public Orders() {
    }

    public Orders(String description)
    {
        this.orderDescription = description;
    }
  
    // Property accessors

    public Long getId() {
        return this.id;
    }
   
    public void setId(Long id) {
        this.id = id;
    }

  
    public String getOrderDescription() {
        return this.orderDescription;
    }
   
    public void setOrderDescription(String orderDescription) {
        this.orderDescription = orderDescription;
    }
}
 

 


修改Customer.hbm.xml映射文件:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="fengyan.Hibernate.Customers" table="customers" catalog="study">
        <id name="id" type="java.lang.Long">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="userName" type="java.lang.String">
            <column name="userName" length="20" />
        </property>
       
        <!-- name集合属性orders   
             table对应的表名   
             cascade 级联关系,当保存或更新时会级联保存与这个Customers对象相关联的所有Orders对象
             inverse=true是将 控权抛出(给Orders) -->
        <set name="orders" table="orders" cascade="save-update" inverse="true">
            <key column="customers_ID"></key><!-- 表字段 -->       
            <one-to-many class="fengyan.Hibernate.Orders"/><!-- 关联的类 -->
        </set>
    </class>
</hibernate

补充:web前端 , JavaScript ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,