2014-04-13 85 views
1

我想返回計數行與一些其他領域的一組與hibernate,我沒有任何字段在我的實體類表示計數。比如我有一個付款的實體類:計算與其他領域在休眠羣

class Payment 
{ 
    private Long id; 
    private String totalCode; 
    private String activityCode; 
    private Long amount; 

    // other fields and setter/getters 
} 

SQL查詢:

select count(*), sum(p.amount), p.total_code, p.activity_code 
from tb_payment p 
group by p.total_code,p.activity_code 

和我的休眠標準:

Session session = getCurrentSession(); 
ProjectionList projectionList = Projections.projectionList();   
projectionList.add(Projections.groupProperty("totalCode")) 
     .add(Projections.groupProperty("activityCode")) 
     .add(Projections.sum("amount")) 
     .add(Projections.count("id")); 
Criteria criteria = session.createCriteria(Payment.class); 
criteria.setProjection(projectionList); 
List<Payment> payments = criteria.list(); 

正如我所說的,我的問題是我不知道在哪裏/如何訪問count的值(來自criteria.list())!?

回答

2

我覺得這裏是你的代碼的正確版本:

Session session = getCurrentSession(); 
ProjectionList projectionList = Projections.projectionList();   
projectionList.add(Projections.groupProperty("totalCode")) 
     .add(Projections.groupProperty("activityCode")) 
     .add(Projections.sum("amount")) 
     .add(Projections.rowCount()); 
Criteria criteria = session.createCriteria(Payment.class); 
criteria.setProjection(projectionList); 
List<Object[]> payments = criteria.list(); 
for (Object[] payment : payments) { 
    System.out.println("totalCode: " + payment[0]); 
    System.out.println("activityCode: " + payment[1]); 
    System.out.println("amountSum: " + payment[2]); 
    System.out.println("rowCount: " + payment[3]); 
} 
+0

有什麼辦法,我可以使用實體管理器和CriteriaQuery中Achive使用JPA 2相同..我沒能找到一種方法,使用用CriteriaQuery進行投影。 – Ysak