轉載http://www.iteye.com/problems/77177

00

使用hibernate的sum()查詢時,新生成的sum()屬性如何對應POJO類的屬性?5

[size=medium]我用hibernate逆向工程生成了一個表stock對應POJO類。 
表的字段有name(vchar),value(number),id(vchar),主鍵爲id 
對應POJO類的屬性爲name(String),value(double),id(String). 
現在我需要做查詢 select id,sum(value) from stock group by id 
但是hibernate查詢時一般都是from stock where ... 即查詢的屬性可以對應到POJO類的屬性。但是sum(value)怎麼對應到POJO類中? 
我以前的方法是如下: 
List<Stock> getStocks(String hql){ 
  HibernateTemplate ht=this.getHibernateTemplate(); 
  return ht.find(hql) 


但是現在hql中sum(value)屬性沒有POJO的屬性與之對應,求教求教啊

問題補充:那hql語句從哪裏傳入呢?
kidding87 寫道
使用Criteria 
網上找了個例子 
List cats=session.createCriteria(Cat.class) 
               .setProjection(Projections.projectionList() 
               .add(Projections.rowCount()) 
               .add(Projections.avg("weight")) 
               .add(Projections.max("weight")) 
               .add(Projections.min("weight")) 
               .add(Projections.groupProperty("color")) 
           ).addOrder(Order.asc("color")).list(); 


問題補充:
斐斐寶貝 寫道
select new (a.id,a.value,a.name,a.sum) from 實體類  a group by a.id 
在實體類中加一個臨時變量sum,get set 以後 
然後構造方法中加進去 
比如實體類爲A 
public class A 

  private int id; 
   private String name; 
   private int value; 
   private int sum=0;//臨時變量 
  public A(){} 
  public A(int id,int value,String name,int sum){} 
   this.id=id; 
   this.name=name; 
   this.value=value; 
   sum+=this.value; 

就是這麼個形式,你再改改,也許就能用了。


這樣或許可以,但是每次新增一個查詢的屬性都要在POJO類中添加對應的屬性會不會很麻煩?有沒有類似我直接寫一個StockUtil的類,添加屬性對應select後的屬性,如id,sum(value)等,然後用hql查詢返回一個StockUtil的List對象。

問題補充:那通過criteria方法可以返回一個List對象,假如我的數據庫中ID字段是char(8)的話,在List對象中對應的id屬性的值只能取到實際id的頭一個字母。也就是把char(8)直接當成char型了。請問除了改數據庫還有沒別的辦法?
kidding87 寫道
hibernate有兩種查詢方式啊 
hql和criteria 
criteria是純對象的查詢
發佈了22 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章