Hibernate一对多关联映射

来源:互联网 发布:淘宝达人的账号简介 编辑:程序博客网 时间:2024/05/19 13:09

Customer类

public class Customer {  private Integer id;  private String name;  //一个客户对应多个订单  private Set<Order> orders=new HashSet<Order>();    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Set<Order> getOrders() {        return orders;    }    public void setOrders(Set<Order> orders) {        this.orders = orders;    }     }

Order类

public class Order {  private Integer id;  private String address;  private double price;  //每个订单对应一个客户  private Customer customer;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public Customer getCustomer() {        return customer;    }    public void setCustomer(Customer customer) {        this.customer = customer;    }}

Customer.hbm.xml映射文件

<hibernate-mapping>    <class name="hibernate.Customer" table="customer">        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator class="native" />        </id>        <property name="name" type="java.lang.String">            <column name="name" />        </property>        <!-- 订单表中的外键cid 集-->        <set name="orders" table="Order">            <key>                <column name="cid" />            </key>            <one-to-many class="hibernate.Order" />        </set>    </class></hibernate-mapping>

Order.hbm.xml映射文件

<hibernate-mapping>    <class name="hibernate.Order" table="Order">        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator class="native" />        </id>        <property name="address" type="java.lang.String">            <column name="address" />        </property>        <property name="price" type="double">            <column name="price" />        </property>        <!-- 订单类对应得客户 -->        <many-to-one name="customer" class="hibernate.Customer">            <column name="cid" />        </many-to-one>    </class></hibernate-mapping>

Test测试类

public class Test {    public static void main(String[] args) {        new Test().test();    }    public void test(){      Session session=HibernateUtils.getSession();      session.beginTransaction();      //创建客户      Customer c=new Customer();      c.setName("张三");      //创建两个订单      Order o1=new Order();      o1.setAddress("北京");      o1.setPrice(500d);      Order o2=new Order();      o2.setAddress("上海");      o2.setPrice(800d);      //订单属于某个客户      o1.setCustomer(c);      o2.setCustomer(c);      //描述客户有多个订单      c.getOrders().add(o1);      c.getOrders().add(o2);      //先存客户再存订单      session.save(c);      session.save(o1);      session.save(o2);      session.getTransaction().commit();      session.close();    }}

执行的sql语句

Hibernate:     insert     into        customer        (name)     values        (?)Hibernate:     insert     into        order1        (address, price, cid)     values        (?, ?, ?)Hibernate:     insert     into        order1        (address, price, cid)     values        (?, ?, ?)Hibernate:     update        order1     set        cid=?     where        id=?Hibernate:     update        order1     set        cid=?     where        id=?

注:Order表不能写成ORDER或order