与 hibernate 组中的其他字段一起计数

Ary*_*rya 3 java sql hibernate group-by criteria

我想通过休眠返回组中其他字段的行,并且我的实体类中没有任何字段表示计数。例如我有一个 Payment 实体类:

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

    // other fields and setter/getters
}
Run Code Online (Sandbox Code Playgroud)

sql查询:

select count(*), sum(p.amount), p.total_code, p.activity_code 
from  tb_payment p
group by p.total_code,p.activity_code
Run Code Online (Sandbox Code Playgroud)

和我的休眠标准:

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();
Run Code Online (Sandbox Code Playgroud)

正如我所说,我的问题是我不知道在哪里/如何访问计数的值(来自criteria.list())!?

den*_*ned 6

我认为这是您代码的正确版本:

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]);
}
Run Code Online (Sandbox Code Playgroud)