每日一得

          不求多得,只求一得 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 閱讀(3096) 評論(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
            回復  更多評論
            

          主站蜘蛛池模板: 丹阳市| 于都县| 金阳县| 梨树县| 长白| 突泉县| 临夏县| 丽水市| 奉贤区| 宜城市| 明星| 锦屏县| 沁阳市| 镇原县| 昭觉县| 临洮县| 留坝县| 平山县| 石河子市| 荔波县| 威信县| 精河县| 宣威市| 望城县| 镶黄旗| 乐业县| 绍兴县| 山阴县| 得荣县| 葫芦岛市| 滕州市| 昌图县| 潢川县| 卓尼县| 南皮县| 惠东县| 遵义市| 桦甸市| 瑞安市| 张家界市| 交口县|