隨筆-61  評(píng)論-159  文章-0  trackbacks-0
                 用hibernate的ORM框架有一段時(shí)間了,現(xiàn)在來回顧一下Seesion中的load和get。
                 一、get不支持lazy,load支持lazy。
                 二、采用get加載數(shù)據(jù),如果沒有匹配的數(shù)據(jù),返回null,而load則拋出異常。
                 get的例子:
           1public void testGetMethod() {
           2        Session session = null;
           3        try {
           4            session = HibernateUtils.getSession();
           5            session.beginTransaction();
           6            
           7            //馬上發(fā)出查詢sql,加載User對(duì)象
           8            User user = (User)session.get(User.class"402880d01b9bf210011b9bf2c2ff0002");
           9            System.out.println("user.name=" + user.getName());
          10            
          11            user.setName("張三");
          12            session.getTransaction().commit();
          13        }
          catch(Exception e) {
          14            e.printStackTrace();
          15            session.getTransaction().rollback();
          16        }
          finally {
          17            HibernateUtils.closeSession(session);
          18        }

          19    }

          PS:在執(zhí)行第8行語句的時(shí)候,如果數(shù)據(jù)庫有相關(guān)的記錄,則立刻發(fā)出sql語句,即使是沒有第9行中user.getName()方法調(diào)用,如果沒有匹配的記錄則返回來一個(gè)null。

                  load方法例子:
           1public void testLoadMethod() {
           2        Session session = null;
           3        try {
           4            session = HibernateUtils.getSession();
           5            session.beginTransaction();
           6            
           7            //不會(huì)發(fā)出查詢sql,因?yàn)閘oad方法實(shí)現(xiàn)了lazy(懶加載或延遲加載)
           8            //延遲加載:只有真正使用這個(gè)對(duì)象的時(shí)候,才加載(發(fā)出sql語句)
           9            //hibernate延遲加載實(shí)現(xiàn)原理是代理方式
          10            User user = (User)session.load(User.class"402880d01b9bf210011b9bf2b2ff0002");
          11            System.out.println("user.name=" + user.getName());
          12            user.setName("李四");
          13            session.getTransaction().commit();
          14        }
          catch(Exception e) {
          15            e.printStackTrace();
          16            session.getTransaction().rollback();
          17        }
          finally {
          18            HibernateUtils.closeSession(session);
          19        }

          20    }

          PS:在執(zhí)行到10句代碼的時(shí)候并沒有立刻發(fā)出sql語句,由于load實(shí)現(xiàn)了lazy延遲加載,延遲加載只有真正使用該對(duì)象的時(shí)候才進(jìn)行加載,發(fā)出sql語句,關(guān)鍵是11句代碼。如果load方法里面的id在數(shù)據(jù)庫表里面沒有相關(guān)的,則會(huì)發(fā)出ObjectNotFoundException異常。

          PSPS:可以通過設(shè)置斷點(diǎn),用debug來跟蹤相關(guān)變量跟對(duì)象的改變,這樣就可以很清晰理解load和get這兩個(gè)方法。


          -------------------------------------------------------------------------------------------------
          PS:本博客文章,如果沒有注明是有“轉(zhuǎn)”字樣,屬于本人原創(chuàng)。如果需要轉(zhuǎn)載,務(wù)必注明作者文章的詳細(xì)出處地址,否則不允許轉(zhuǎn)載,多謝合作!
          posted on 2008-10-09 20:38 apple0668 閱讀(448) 評(píng)論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 新泰市| 岳西县| 监利县| 来宾市| 阿荣旗| 广宗县| 铜山县| 延吉市| 诸城市| 鄢陵县| 沐川县| 高唐县| 嵊州市| 交口县| 栾城县| 望城县| 孝义市| 乡城县| 平湖市| 阳高县| 乌苏市| 垦利县| 印江| 三明市| 花莲市| 九台市| 襄城县| 萨迦县| 庆安县| 马龙县| 博客| 太湖县| 常宁市| 华容县| 禹州市| 靖江市| 佛冈县| 夏邑县| 天长市| 米泉市| 绵阳市|