*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);