hibernate条件查询在单个查询中获取多个计数。

hibernate条件查询在单个查询中获取多个计数。,hibernate,jpa,Hibernate,Jpa,我想知道是否有人知道如何使用hibernates条件查询从单个查询中获取多个计数 我有以下疑问 List<PurchaseRequest> prs = this.session.createCriteria(PurchaseRequest.class).list(); List prs=this.session.createCriteria(PurchaseRequest.class).List(); 在PurchaseRequest中,我有一个名为current_state的列

我想知道是否有人知道如何使用hibernates条件查询从单个查询中获取多个计数

我有以下疑问

List<PurchaseRequest> prs = this.session.createCriteria(PurchaseRequest.class).list();
List prs=this.session.createCriteria(PurchaseRequest.class).List();
在PurchaseRequest中,我有一个名为current_state的列。我想查询所有PurchaseRequest行,并将当前的_状态分组在一起,以便获得每个当前_状态的总数

国家是这样的,创造者,授权人,转让人。等等。

试试这个:

Criteria criteriaPurchaseRequest=this.session.createCriteria(PurchaseRequest.class);

ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.groupProperty("current_state"));
projectionList.add(Projections.rowCount());

criteriaPurchaseRequest.setProjection(projectionList);

List results = criteriaPurchaseRequest.list();
要获得结果,请执行以下操作:

List results = criteriaPurchaseRequest.list();
Map currentStateMap = new HashMap();
Iterator it=results.iterator();
while (it.hasNext()){
Object obj[]=(Object[])it.next();           
     CurrentState currentState = (CurrentState )obj[0];
    currentStateMap .put(currentState.getDescription().toLowerCase(), (Integer)obj[1]);
}

其中CurrentState是一个表示列当前状态的对象(请记住,Hibernate正在处理对象)。

您的意思是
按当前状态从PurchaseRequest组中选择当前状态,计数(*)
?@AlexS yes,这正是我的意思。为了获得金额,我需要将结果转换为什么?您可以尝试以下查询:“按当前状态、金额从PurchaseRequest组中选择当前状态、总和(金额)、计数(*)”?对不起,我指的是计数。你所说的似乎是正确的,我只是不知道如何让它显示结果中的计数。如果我拉出groupProperty,我可以将它强制转换为Long,但是如果我重新添加group,则会中断,我假设它将返回带有计数的状态,并且需要创建某种类型的对象,以便将其强制转换为。只是不确定组属性是什么。我想我们很接近esmoreno,但是您的代码示例没有编译,编译错误消息“required:array或java.lang.Iterable-found:org.hibernate.Criteria”,当我使用结果时,我得到了这样一个消息,“不兼容类型required:java.lang.Object[]”发现:java.lang.object有效,对原始代码的另一个快速修复方法是使用带有结果的列表,然后将结果传递到for循环。谢谢