Hibernate一對多雙向註解配置實例

*customer和order是一對多的關係,一個用戶可以有多條訂單,一條訂單隻能從屬於一個用戶。
所以,customer是一的一方,order是多的一方。*

package com.lejuad.lejuadhome.manager.entity;

import java.io.Serializable;
import java.util.List;

import javax.annotation.Generated;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

//一的一方
@Entity
@Table(name="customer",catalog="xltest")
public class Customer implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1347529317729031020L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @Column(name="name")
    private String name;//用戶名字

    @Column(name="cid")
    private int cid;//用於和order的orderNumber相關聯的字段
    //注意:此處我們不用主鍵關聯

    //一的一方的配置
    @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Order> orders;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Order> getOrders() {
        return orders;
    }

    public void setOrders(List<Order> orders) {
        this.orders = orders;
    }

    public int getCid() {
        return cid;
    }

    public void setCid(int cid) {
        this.cid = cid;
    }

}
//多的一方
package com.lejuad.lejuadhome.manager.entity;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "orde",catalog="xltest")
public class Order implements Serializable{

    private static final long serialVersionUID = 5134744924238999336L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column(name = "orderNumber")
    private int orderNumber;

    @Column(name = "orderName")
    private String orderName;

    //order對象的orderNumber字段和customer對象的cid字段關聯
    @ManyToOne(cascade = CascadeType.ALL, optional = false)
    @JoinColumn(name="orderNumber", referencedColumnName="cid",insertable=false,updatable=false)
    private Customer customer;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getOrderNumber() {
        return orderNumber;
    }
    public void setOrderNumber(int orderNumber) {
        this.orderNumber = orderNumber;
    }



    public Customer getCustomer() {
        return customer;
    }
    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public String getOrderName() {
        return orderName;
    }
    public void setOrderName(String orderName) {
        this.orderName = orderName;
    }
    @Override
    public String toString() {
        return "Order [id=" + id + ", orderNumber=" + orderNumber
                + ", orderName=" + orderName + "]";
    }



}
//一個測試類,用來向這兩個表級聯添加數據

    CustomerService service1=(CustomerService) ThreadTest.cxt.getBean("customerService");
    System.out.println("======="+service1);
    for(int i=0;i<100;i++){
        Customer customer=new Customer();
        customer.setName("cus"+i);
        customer.setCid(i);//注意:這裏一定要手動設置值

        List<Order> orders=new ArrayList<Order>();
        for(int j=0;j<10;j++){
            Order order=new Order();
            order.setOrderName("order"+j);
            order.setOrderName("order"+j);
            order.setOrderNumber(i);//注意:
            //這裏設置的值和上面cid的值保持一致
            //因爲cid和orderNumber是關聯的字段,而且這兩個字段不是主鍵不能自增
            //如果這兩個關聯的字段都是自增的,就可以不設置值
            orders.add(order);
        }

        customer.setOrders(orders);
        try {
            service1.saveData(customer);
            System.out.println("statics插入成功"+"****************"+i);
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("statics插入失敗");
            }
        }
//根據給定的客戶,查詢該客戶的所有訂單
        String hql="from Customer c where c.id=1";
        Customer c=service1.findOneByHql(hql);
        System.out.println(c);

        List<Order> orders=c.getOrders();
        for(Order o:orders){
            System.out.println(o);
        }
        //或者
        /*List<Order> orders=c.getOrders();
        Iterator it=orders.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }*/
    //根據給定的訂單,查出發出訂單的客戶
        Order o=new Order();
        o.setId(1);

        String hql="from Order as o where id="+o.getId();
        Order order=service.findOneByHql(hql);
        System.out.println(order);
        System.out.println(order.getCustomer());

        //並修改該客戶的名字
        Customer customer=order.getCustomer();
        customer.setName("xiaolu");
        order.setCustomer(customer);
        System.out.println(order.getCustomer());
        service.update(order);
發佈了24 篇原創文章 · 獲贊 21 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章