hibernate query.list() 返回的數據類型


 

在hibernate中,用hql語句查詢實體類,采用list方法的返回結果為一個List,該List中封裝的對象分為以下三種情況:

1.查詢全部字段的情況下,如"from 實體類",list中封裝的對象為實體類本身,各屬性都將得到填充。

String hql = " from Commodity ";
        Query query = session.createQuery(hql);
        List<Commodity> commodities = query.list();
        
        for(Commodity c : commodities){
            System.out.println("name:"+c.getName());
            
            System.out.println("seller's name :"+c.getSeller().getName());

 

2.只查詢一個字段,默認情況下,list中封裝的是Object對象。

String hql = " select s.name from Seller s ";
        
        Query query = session.createQuery(hql);
        
        List<Object> list = query.list();
        
        for(Object obj : list){
            System.out.println("name:"+obj);
        }

 

3.查詢兩個或兩個以上的字段,默認情況下,list中封裝的是Object[],長度與所查詢的字段數一致。

String hql = " select c.name,c.tel,c.age from Customer c ";
        Query query = session.createQuery(hql);
        List<Object[]> list = query.list();
        for(Object[] objs : list){
            System.out.println("name:"+objs[0]);
            System.out.println("tel:"+objs[1]);
            System.out.println("age:"+objs[2]);
        }

 

對於后兩種情況,用標簽遍歷時不太方便,因為無法直接轉換成實體類的對象。

比較簡單的解決方法是:在hql中使用 select new 包名.類名(屬性1,屬性2……) from 實體類,


同時在實體類中添加帶參的構造方法,參數的個數和順序與(屬性1,屬性2……) 保持一致,


這樣我們得到的list中存放的依然是實體類的對象,所查詢到的屬性得到了填充,使用起來更為方便。


免責聲明!

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



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