作者: liuwei1981  鏈接:http://liuwei1981.javaeye.com/blog/225492  發(fā)表時(shí)間: 2008年08月07日

聲明:本文系JavaEye網(wǎng)站發(fā)布的原創(chuàng)博客文章,未經(jīng)作者書面許可,嚴(yán)禁任何網(wǎng)站轉(zhuǎn)載本文,否則必將追究法律責(zé)任!

最近做了一個(gè)網(wǎng)站,在運(yùn)行一段時(shí)間出現(xiàn)內(nèi)存耗盡,導(dǎo)致服務(wù)器宕機(jī),具體問題是:對于一個(gè)News新聞對象,在新聞列表頁面,我們只要得到其主鍵、標(biāo)題、發(fā)布日期和瀏覽次數(shù)幾個(gè)屬性,原來的代碼直接使用這樣的語句:
 
FROM News WHERE +條件語句
 
  獲取了新聞對象列表,取出了新聞對象的全部屬性,但實(shí)際上并不需要其內(nèi)容和其他的屬性,因?yàn)閮?nèi)容都是比較大的,所以會浪費(fèi)不少內(nèi)存。

    我使用的是hibernate3.2,hql語句查詢出來的都應(yīng)該是對象的。
 
    把hql改寫成這樣——
 
select id,title,pubDate,num from News where……"
    
來實(shí)現(xiàn),但是,這樣查詢出來的是一個(gè)對象數(shù)組,需要新建一個(gè)News對象,然后把屬性一一賦值進(jìn)入,太麻煩了。
google了以下(懶得看文檔了),發(fā)現(xiàn)可以通過如下方法解決:

1.首先在News實(shí)體里面加一個(gè)構(gòu)造函數(shù),把要查詢出來的字段當(dāng)參數(shù)傳進(jìn)去

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

} 
 
2.然后改寫
 
hql="select new News(id,title,pubdate,num) from Document where……" 
 
這樣,查詢出來的就是News對象,而且只有主鍵、標(biāo)題、發(fā)布日期和瀏覽次數(shù)幾個(gè)屬性,其他的為Null。

本文的討論也很精彩,瀏覽討論>>


JavaEye推薦




文章來源:http://liuwei1981.javaeye.com/blog/225492