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