【问题标题】:Hibernate Criteria API: count and group by with result in MapHibernate Criteria API:在 Map 中使用结果进行计数和分组
【发布时间】:2010-06-03 21:49:07
【问题描述】:

Car 实体映射到具有 2 列的数据库表:IDColor

CarDao有如下方法:

Map<Color, Integer> countByColor();

如果我们在数据库表中有 3 辆红色汽车和 2 辆蓝色汽车,则该方法返回一个包含 2 个键(红色和蓝色)和相应计数(3 和 2)的地图。

我想用 Criteria API 来做这件事。该方法会是什么样子?让我担心的是地图部分。

谢谢。

【问题讨论】:

    标签: hibernate group-by criteria-api


    【解决方案1】:

    我认为使用 Criteria API 无法实现您所要求的(不做混乱的事情):API 中的任何方法都不会返回集合(在您的情况下将是一个地图),它们只返回列表。

    所以你可以做的是编写你自己的 ResultTransformer,它会返回一个单例列表,其第一个也是唯一的元素将是你的地图......但在我看来这会有点混乱。

    类似的东西:

    public class MyResultTransformer implements ResultTransformer {
        public Object transformTuple(Object[] tuple, String[] aliases) {
          return tuple;
        }
        public List transformList(List collection) {
          Map result = new LinkedHashMap(); // to preserve order
          // build the map from the collection
          ...
          return Collections.singletonList(result);
        }
    }
    

    要获得只有两个元素(颜色和计数)的元组,请使用 Criteria.setProjections() 方法。

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 2011-11-16
      • 2013-11-16
      • 2013-03-13
      • 2012-06-11
      • 2016-06-22
      • 2019-02-05
      • 1970-01-01
      • 2016-12-26
      相关资源
      最近更新 更多