posts - 28,comments - 3,trackbacks - 0
Hibernate的自带文档中的多表查询操作

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

缺点:
必须声明并创建类ObjectC,只能创建单个的ObjectC对象

可以通过net.sf.hibernate包提供的

Interface ScrollableResults(这个接口类似JDBC中的ResultSet一样,提供了对返回结果集合的遍历和字段访问方法)
Interface Query( Query接口封装了对数据库的查询等操作,主要使用scroll()方法返回一个ScrollableResults实例)
public ScrollableResults scroll() 将查询结果以ScrollableResults实例返回,但需要注意的是查询返回的结果其实只是一些id,当需要的时候(比如我们使用 ScrollableResults.next()方法后移游标时)这条需要用到的记录才会被真正初始化(这种技术可以称作:延时初始化)
Interface Session(通过Session的createQuery()方法,生成一个Query实例)

..                               PO对象
RsBean.java                        用于保存统计结果Bean
...                         PO映射
RsBeanDao.java                  统计Dao定义
RsBeanImpl.java           统计Dao定义实现
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();// 将用于存放保存的结果集合
        Session session = null;
        ScrollableResults srs = null;
        try{
            session = HibernateSessionFactory.openSession();// 得到一个HibernateSession
            // 下面创建一个匿名Query实例并调用它的scroll()方法返回以ScrollableResults形式组织的查询结果
            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();
            // 将查询结果放入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 李大嘴 阅读(672) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: