2012-09-22 42 views
4

我有一個名爲SaleRecord與領域,如休眠條件查詢與GROUP BY和aliasToBean

@Entity 
public class SaleRecord { 
    private Long id; 
    private String type; 
    private Double amount; 
    //Getter and Setter and more fields 
} 

我想寫下面使用的查詢條件

SELECT s.type AS accountName, SUM(s.amount) AS amount 
FROM salerecord s 
GROUP BY s.type 

我一直在使用純SQL編寫的表/實體在休眠狀態下(其工作)

String sql = " SELECT s.type AS accountName, SUM(s.amount) AS amount "; 
      sql += " FROM salerecord s "; 
      sql += " GROUP BY s.type "; 

List<CollectionDO> incomeList = (List<CollectionDO>) getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(CollectionDO.class)).list(); 

CollectionDO是另一個POJO類,我想要t填充結果。

但是想使用條件編寫,那麼如何編寫這個查詢並將結果轉換爲CollectionDO類。 我曾嘗試以下,但不工作

Criteria criteria = getSession().createCriteria(SaleRecord.class).setResultTransformer(Transformers.aliasToBean(CollectionDO.class)); 
     criteria.setProjection(Projections.property("type")); 
     criteria.setProjection(Projections.sum("amount"));   
     criteria.setProjection(Projections.groupProperty("type")); 
     return (List<CollectionDO>) criteria.list(); 

CollectionDO.java

public class CollectionDO {  
    private Double amount;  
    private String accountName; 

    public String getAccountName() { 
     return accountName; 
    } 
    public void setAccountName(String accountName) { 
     this.accountName = accountName; 
    } 
    public Double getAmount() { 
     return amount; 
    } 
    public void setAmount(Double amount) { 
     this.amount = amount; 
    }  
} 
+0

哪些呢這意味着不工作?拋出一些錯誤? – Vikdor

+0

否。沒有例外,但結果列表爲null。我認爲它無法進行轉換。因爲在條件列名稱是「類型」,但CollectionDO.java有字段爲「accountName」 –

回答

10

我想是不是能夠轉化。在標準列名是「型」,但CollectionDO.java具有字段作爲「帳戶名」

嘗試如下(使用這個版本的add指定別名):

Criteria criteria = 
    getSession() 
     .createCriteria(SaleRecord.class) 
     .add(Restrictions.between("date", 
            reportForm.getFromDate(), 
            reportForm.getToDate())); 

     .setProjection(Projections.projectionList() 
      .add(Projections.property("type"), "accountName") 
      .add(Projections.sum("amount")) 
      .add(Projections.groupProperty("type"))); 
     .setResultTransformer(Transformers.aliasToBean(CollectionDO.class)) 
return (List<CollectionDO>) criteria.list(); 
+0

我認爲它返回的結果,但作爲對象,而不是CollectionDO對象。因此,在迭代時拋出異常爲java.lang.ClassCastException:[Ljava.lang.Object;不能轉換爲org.commission.controller.dashboard.CollectionDO –

+0

同樣的事情對我來說很有用,除了我在調用setProjection之後調用setResultTransformer,在我的代碼中出現類似的情況。你想嘗試一次嗎? – Vikdor

+0

當然,請讓我知道 –