posts - 28,comments - 3,trackbacks - 0
          Hibernate的自帶文檔中的多表查詢(xún)操作

          select new OjbectC(field1, field2,...) from ObjectA a, ObjectB b ...

          缺點(diǎn):
          必須聲明并創(chuàng)建類(lèi)ObjectC,只能創(chuàng)建單個(gè)的ObjectC對(duì)象

          可以通過(guò)net.sf.hibernate包提供的

          Interface ScrollableResults(這個(gè)接口類(lèi)似JDBC中的ResultSet一樣,提供了對(duì)返回結(jié)果集合的遍歷和字段訪問(wèn)方法)
          Interface Query( Query接口封裝了對(duì)數(shù)據(jù)庫(kù)的查詢(xún)等操作,主要使用scroll()方法返回一個(gè)ScrollableResults實(shí)例)
          public ScrollableResults scroll() 將查詢(xún)結(jié)果以ScrollableResults實(shí)例返回,但需要注意的是查詢(xún)返回的結(jié)果其實(shí)只是一些id,當(dāng)需要的時(shí)候(比如我們使用 ScrollableResults.next()方法后移游標(biāo)時(shí))這條需要用到的記錄才會(huì)被真正初始化(這種技術(shù)可以稱(chēng)作:延時(shí)初始化)
          Interface Session(通過(guò)Session的createQuery()方法,生成一個(gè)Query實(shí)例)

          ..                               PO對(duì)象
          RsBean.java                        用于保存統(tǒng)計(jì)結(jié)果Bean
          ...                         PO映射
          RsBeanDao.java                  統(tǒng)計(jì)Dao定義
          RsBeanImpl.java           統(tǒng)計(jì)Dao定義實(shí)現(xiàn)
          DaoFactory.java                         Dao工廠
          HibernateSessionFactory.java     Session工廠


          RsBeanDaoImple .java 代碼:
          package test.dao.impl;

          import java.util.*;
          import test.bean.*;
          import test.dao.*;
          import net.sf.hibernate.*;

          public class RsBeanDaoImple extends RsBeanDao{
             
              // 下面方法集成自TotalChargeDao
              public List statTotalCharge(Date statTimeBegin, Date statTimeEnd) throws DaoException{
                  List res = new Vector();// 將用于存放保存的結(jié)果集合
                  Session session = null;
                  ScrollableResults srs = null;
                  try{
                      session = HibernateSessionFactory.openSession();// 得到一個(gè)HibernateSession
                      // 下面創(chuàng)建一個(gè)匿名Query實(shí)例并調(diào)用它的scroll()方法返回以ScrollableResults形式組織的查詢(xún)結(jié)果
                      srs = session.createQuery(“select b.name, count(a.fee) mix(a.chargeBeginTime) max(a.chargeEndTime) from
                            charge a,customer b where a.idCustomer = b.idCustomer and a.chargeBeginTime >= ? and a.chargeEndTime < ?
                            gourp by a.idCustomer“).setDate(0, statTimeBegin).setDate(1, statTimeEnd).scroll();
                      // 將查詢(xún)結(jié)果放入List保存
                   while(srs.next()){
                          res.add(new TotalCharge(srs.getString(0), srs,getDouble(1), srs.getDate(2), srs.getDate(3)));
                      }
                  }catch(HibernateException he){
                      ;// loging err.....
                      if(srs!=null){
                          try{
                              srs.close();
                          }catch(Exception e){
                              ;
                          }
                      }
                  }finally{
                      try{
                          session.close();
                      }catch(Exception e){
                          ;
                      }
                  }
                  return res;
              }
          }
          posted on 2007-06-29 11:17 李大嘴 閱讀(677) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 房产| 固镇县| 南宫市| 黔东| 宁明县| 佛冈县| 保德县| 辰溪县| 青神县| 田林县| 图木舒克市| 卓尼县| 陆良县| 梅河口市| 彭泽县| 顺平县| 十堰市| 右玉县| 郴州市| 德清县| 峨眉山市| 安平县| 东丰县| 寻乌县| 开平市| 罗城| 富川| 清苑县| 崇礼县| 巴林左旗| 朔州市| 安溪县| 微博| 土默特左旗| 荔波县| 合肥市| 青浦区| 尖扎县| 新乡市| 普兰店市| 外汇|