每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發
          最近關心的內容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
          剛才看了下<精通hibernate>,感覺關于映射關系,尤其是一對多,多對一,多對多關系應該是核心的東西,記錄下.

          業務邏輯:一個客戶(Customer)對應多個訂單(Order)

          方式一: 雙向一對多

          PO:
          Customer:


          Order:

          配置文件

          Customer.hbm.xml:
          xml

          Order.hbm.xml:
          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){
                
              }
            }
          }



          方式二: 單項多對一

          即在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();

          方法二很少用,不過有時我倒是喜歡用它,因為存儲完全由自己的業務邏輯控制,也是比較方便的,以前的一個項目就是這么用,表之間的關系基本沒有,相關聯的信息完全自己當作一個個獨立的表進行插入
          posted on 2006-02-17 21:20 Alex 閱讀(3091) 評論(3)  編輯  收藏 所屬分類: java

          評論

          # re: hibernate配置一對多映射關系 2008-03-29 10:08 游客
          忽悠人  回復  更多評論
            

          # re: hibernate配置一對多映射關系 2008-11-28 17:03 jackie
          是在忽悠人啊  回復  更多評論
            

          # re: hibernate配置一對多映射關系 2013-03-14 17:17 鱷魚的眼淚
          忽悠人@jackie
            回復  更多評論
            

          主站蜘蛛池模板: 四平市| 五台县| 南靖县| 抚远县| 金门县| 米泉市| 新泰市| 昌图县| 凤冈县| 株洲县| 通渭县| 岳池县| 涞水县| 马尔康县| 象山县| 精河县| 栾城县| 鄂托克旗| 旬邑县| 大港区| 南雄市| 淮阳县| 苍山县| 沅陵县| 霍山县| 新昌县| 乐亭县| 洛浦县| 大关县| 常德市| 偏关县| 巫山县| 遂平县| 山阴县| 通海县| 巨鹿县| 大渡口区| 中江县| 神池县| 潜江市| 子洲县|