hibernate HQL查询部分属性

字体大小: 中小 标准 ->行高大小: 标准
由于对象的属性很多,要查出来的属性,就几个
 
此时使用HQL查询的时候,要使用到构造方法
 
StringBuffer hql = new StringBuffer();
 
       hql.append("select new CmsCyUser(raceNum,tickets,newTickets) from CmsCyUser");
 
       if(raceNums!=null && raceNums.length()>0){
 
           hql.append(" where raceNum in ("+raceNumBuffer.toString()+")");
 
       }
 
       List list = userBPO.list(hql.toString());
 
2.   在CmsCyUser.java中添加构造方法
 
public CmsCyUser(String raceNum, Integer tickets,Integer newTickets) {
 
       this.raceNum = raceNum;
 
       this.tickets = tickets;
 
       this.newTickets = newTickets;
 
    }
 
3. dao层的代码
 
public List list(final String hqlStr) {
 
       return (List)getHibernateTemplate().execute(
 
                 new HibernateCallback() {
 
                 private final String hql=hqlStr;
 
              public Object doInHibernate(Session session)
 
                     throws HibernateException, SQLException {
 
                   Query query = session.createQuery(this.hql);
 
                   return query.list();
 
              }
 
               });
 
    }
 
 
 
最近做了一个网站,在运行一段时间出现内存耗尽,导致服务器宕机,具体问题是:对于一个News新闻对象,在新闻列表页面,我们只要得到其主键、标题、发布日期和浏览次数几个属性,原来的代码直接使用这样的语句:
 
 FROM News WHERE +条件语句
 
   获取了新闻对象列表,取出了新闻对象的全部属性,但实际上并不需要其内容和其他的属性,因为内容都是比较大的,所以会浪费不少内存。 
   我使用的是hibernate3.2,hql语句查询出来的都应该是对象的。
 
     把hql改写成这样——
 
 select id,title,pubDate,num from News where……"
 
     来实现,但是,这样查询出来的是一个对象数组,需要新建一个News对象,然后把属性一一赋值进入,太麻烦了。                         
google了以下(懒得看文档了),发现可以通过如下方法解决: 
1.首先在News实体里面加一个构造函数,把要查询出来的字段当参数传进去 

public News(intid,String title,String pubDate,int num){ 

} 

 2.然后改写
 
 hql="select new News(id,title,pubdate,num) from Document where……" 

 这样,查询出来的就是News对象,而且只有主键、标题、发布日期和浏览次数几个属性,其他的为Null。

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68541.html