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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM