剛才看了下<精通hibernate>,感覺關于映射關系,尤其是一對多,多對一,多對多關系應該是核心的東西,記錄下.
業務邏輯:一個客戶(Customer)對應多個訂單(Order)
Customer:

Order:

配置文件
Customer.hbm.xml:
xml
Order.hbm.xml:
xml
測試類 CustomerTest.java
方式二: 單項多對一
即在Cutomer中沒有Order的信息(PO和xml文件),在Order中設置Customer信息(同上)
保存客戶和訂單信息代碼如下:
方法二很少用,不過有時我倒是喜歡用它,因為存儲完全由自己的業務邏輯控制,也是比較方便的,以前的一個項目就是這么用,表之間的關系基本沒有,相關聯的信息完全自己當作一個個獨立的表進行插入
業務邏輯:一個客戶(Customer)對應多個訂單(Order)
方式一: 雙向一對多
PO:Customer:

Order:

配置文件
Customer.hbm.xml:

Order.hbm.xml:

測試類 CustomerTest.java
package net.foxlog.prj.business;
import net.sf.hibernate.Session;
import net.foxlog.prj.dao.DBUtil;
import net.sf.hibernate.Transaction;
import java.util.HashSet;
public class CustomerTest {
public CustomerTest() {
}
public static void test(){
try{
new CustomerTest().saveCustomerAndOrderWithCascade();
}catch(Exception ex){
ex.printStackTrace();
}
}
//保存級聯信息 客戶-訂單
public void saveCustomerAndOrderWithCascade() throws Exception{
Session session = DBUtil.currentSession();
Transaction tx = null;
try{
tx = session.beginTransaction();
Customer custmer = new Customer("Jack",new HashSet());
Order order = new Order();
order.setCustomer(custmer);
order.setOrderNumber("JackOrder001");
custmer.getOrders().add(order);
session.save(custmer);
tx.commit();
}catch(Exception ex){
}
}
}
import net.sf.hibernate.Session;
import net.foxlog.prj.dao.DBUtil;
import net.sf.hibernate.Transaction;
import java.util.HashSet;
public class CustomerTest {
public CustomerTest() {
}
public static void test(){
try{
new CustomerTest().saveCustomerAndOrderWithCascade();
}catch(Exception ex){
ex.printStackTrace();
}
}
//保存級聯信息 客戶-訂單
public void saveCustomerAndOrderWithCascade() throws Exception{
Session session = DBUtil.currentSession();
Transaction tx = null;
try{
tx = session.beginTransaction();
Customer custmer = new Customer("Jack",new HashSet());
Order order = new Order();
order.setCustomer(custmer);
order.setOrderNumber("JackOrder001");
custmer.getOrders().add(order);
session.save(custmer);
tx.commit();
}catch(Exception ex){
}
}
}
方式二: 單項多對一
即在Cutomer中沒有Order的信息(PO和xml文件),在Order中設置Customer信息(同上)保存客戶和訂單信息代碼如下:
tx = session.beginTransaction();
Customer customer=new Customer("Jack");
Order order1=new Order("Jack_Order001",customer);
Order order2=new Order("Jack_Order002",customer);
session.save(order1);
session.save(order2);
tx.commit();
Customer customer=new Customer("Jack");
Order order1=new Order("Jack_Order001",customer);
Order order2=new Order("Jack_Order002",customer);
session.save(order1);
session.save(order2);
tx.commit();
方法二很少用,不過有時我倒是喜歡用它,因為存儲完全由自己的業務邏輯控制,也是比較方便的,以前的一個項目就是這么用,表之間的關系基本沒有,相關聯的信息完全自己當作一個個獨立的表進行插入