Java 使用Group By和aliasToBean休眠条件查询

Java 使用Group By和aliasToBean休眠条件查询,java,hibernate,Java,Hibernate,我有一个名为SaleRecord的表/实体,其中包含如下字段 @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 s

我有一个名为SaleRecord的表/实体,其中包含如下字段

@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
我已经在Hibernate中使用普通SQL编写了(它的工作原理)

我认为这是无法改变的。在条件中,列名为“type”,但CollectionDO.java的字段为“accountName”

按如下方式尝试(使用此版本的指定别名):

标准=
getSession()
.createCriteria(SaleRecord.class)
.add(限制)介于(“日期”,
reportForm.getFromDate(),
reportForm.getToDate());
.setProjection(Projections.projectionList()项目)
.add(Projections.property(“类型”),“accountName”)
.添加(预测金额(“金额”))
.add(projects.groupProperty(“类型”));
.setResultTransformer(Transformers.aliasToBean(CollectionDO.class))
返回(列表)条件。列表();

不工作是什么意思?抛出一些错误?否。没有异常,但结果列表为空。我认为这是无法改变的。正如在条件中一样,列名是“type”,但CollectionDO.java的字段是“accountName”,我认为它返回的是结果,而是对象,而不是CollectionDO对象。因此,在迭代时,它会将异常作为java.lang.ClassCastException抛出:[Ljava.lang.Object;无法强制转换为org.commission.controller.dashboard.collectionDo相同的方法对我有效,只是我在调用setProjection后调用setResultTransformer,在我的代码中出现了类似的情况。您想尝试一下吗?我更新了我的答案,说明我到底是如何在中添加projections和transformer类的我的密码,不知道你有没有机会看到。
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();
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();
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;
    }     
}
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();