Hibernate Criteria API:在Map中计算和分组结果

时间:2010-06-03 21:49:08

标签: hibernate group-by criteria-api

Car实体映射到包含2列的数据库表:IDColor

CarDao有以下方法:

Map<Color, Integer> countByColor();

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

我想使用Criteria API执行此操作。这个方法会是什么样的?这是地图部分让我担心。

感谢。

1 个答案:

答案 0 :(得分:1)

我认为你所要求的是不可能(没有搞乱的东西)使用Criteria API:API中没有一个方法返回一个集合(在你的情况下会是一个地图),它们只返回列表。 / p>

所以你可以做的就是编写自己的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()方法。